我目前正在开发一个数据库挖掘程序,以从 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/