vb.net - sqlite - 在一个连接中选择多个值

标签 vb.net sqlite

我目前正在开发一个数据库挖掘程序,以从 sqlite db 中提取数据并填充表单。这需要同时从几个不同的表中提取几种类型的数据,并且看起来已经有点资源密集型了。有没有更好的方法来解决这个问题?我应该使用后台工作人员来运行 sql 查询吗?我正在运行多个 SQLiteCommand.ExecuteReader 实例,是否可以避免这种情况?

代码:

Public Shared Sub SQLInq()

    'Database Information
    Dim connection As String = "Data Source=" & _Compression.path
    Dim SQLConn As New SQLiteConnection(connection)
    Dim SQLcmd As New SQLiteCommand(SQLConn)
    Dim SQLdr As SQLiteDataReader

    'Connect to Database
    SQLConn.Open()
    SQLcmd.Connection = SQLConn

    'Run query
    SQLcmd.CommandText = "Select * FROM FsFileVersion WHERE FileDescription_LTH = 'filea' LIMIT 1;"
    SQLdr = SQLcmd.ExecuteReader()
    While SQLdr.Read()
        fileaVrsn = (SQLdr.GetString(SQLdr.GetOrdinal("FileVersion_LTH")))
    End While
    SQLdr.Close()

    'Run query
    SQLcmd.CommandText = "Select * FROM FsFileVersion WHERE FileDescription_LTH = 'fileb' LIMIT 1;"
    SQLdr = SQLcmd.ExecuteReader()
    While SQLdr.Read()
        filebVrsn = (SQLdr.GetString(SQLdr.GetOrdinal("FileVersion_LTH")))
    End While
    SQLdr.Close()

    'Close connection
    SQLConn.Close()

    'Revert cursor wait to arror
    Application.Current.MainWindow.Cursor = Cursors.Arrow
End Sub

最佳答案

如果您真的只对一条记录( LIMIT 1 )和一列( FileVersion_LTH )感兴趣,那么您可以删除 ExecuteReader并且只使用 ExecuteScalar

Dim connection As String = "Data Source=" & _Compression.path
Using SQLConn = New SQLiteConnection(connection)
Using SQLcmd = New SQLiteCommand(SQLConn)
    SQLConn.Open()
    SQLcmd.CommandText = "Select FileVersion_LTH FROM FsFileVersion " & _ 
                         "WHERE FileDescription_LTH = 'filea' LIMIT 1;"
    Dim result = SQLcmd.ExecuteScalar()
    if result IsNot Nothing Then 
        fileaVrsn = result.ToString()
    End if

    ... repeat for 'fileb'
End Using
End Using

但是我不确定这是否真的是性能改进。毕竟,您的代码似乎还不错。请记住使用 using statement

编辑 另一个可能的改进是再次使用 SQLiteDataReader,但只执行一次对数据库的调用

……
SQLcmd.CommandText = "从 FsFileVersion 中选择 FileVersion_LTH "& _
"WHERE FileDescription_LTH = 'filea' OR "& _
"FileDescription_LTH = 'fileb'"& _
“按文件描述排序_LTH”
使用 SQLiteDataReader reader = SQLcmd.ExecuteReader()
如果 reader.Read() 那么
fileaVrsn = reader(0).ToString()
如果 reader.Read() 那么
filebVrsn = reader(0).ToString()
万一
万一
结束使用
...

第二种方法可能是一种改进,但只有在 LIMIT 1 不是真正需要的情况下才可行

关于vb.net - sqlite - 在一个连接中选择多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574223/

相关文章:

ios - 在 swift 中使用 sqlite 数据库以字符串形式检索数据时,用整数对列进行排序?

android - 在 Sqlite 表中插入 null

node.js - 带有 iojs、koa 和 yield 的 node-sqlite3

sqlite - 在 UWP 应用程序中包含带有数据的 SQLite DB 文件

vb.net - 是否可以在 MessageFilter 函数中捕获按钮名称?

vb.net - 运行“System.Diagnostics.Process.Start()”时拒绝访问

vb.net - 如何覆盖 Microsoft 的 datagridview 以允许在 VB.NET 中进行后缓冲?

.net - 在 XElement 中获取空格

docker - 在docker-compose上为sql:的db:和db_backup的最佳图像是什么?

vb.net - 使用 Web 部署项目替换 web.config 中的部分