gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:48:22 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com