哪一个可能是更好的做法?在我的情况下,我需要检查表中是否存在特定数据。我正在迭代 Excel 文件并使用 VB.NET 验证我的表中是否存在代码。我有两个选项可以做到这一点(或者如果有更好的方法可以做到这一点,我愿意接受建议)。
首先是逐个检查,每个循环执行此代码:
SQL = "SELECT TOP 1 * FROM Table1 WHERE Code = '" & codeFromExcel & "'"
rs = dbConn.Execute(SQL)
If Not rs.EOF Then
isFound = True
Else
isFound = False
End If
另一个是我在 List(Of T)中加载所有代码
Dim myList As New List(Of String)()
rs = Nothing
rs = dbConn.Execute("Select Code from Table1")
If Not rs.EOF Then
Do While Not rs.EOF
myList.Add(rs.Fields("Code").Value.ToString)
rs.MoveNext()
Loop
End If
然后在Excel中迭代时检查每条记录是否在 List(Of T)中。
If myList.Contains(codeFromExcel) Then
isFound = True
Else
isFound = False
End If
我大部分时间都在使用这种东西,我想知道哪种方法最有效。目前我的数据库中只有几条记录。当我需要处理大量记录时,我希望我的代码准备好并且高效。提前谢谢!
其他信息:数据不需要" 新鲜"因为该表仅用于一次性输入。
答案 0 :(得分:1)
我个人更喜欢打开尽可能少的数据库连接。
所以:
如果表格不是很大(几百行),我会使用“缓存”选项。
一般而言:
我会在列表中收集所有excel代码。 (excelCodes)
然后我会查询类似Select Distinct Code from Table1 Where Code In ( excelCodesList )
的内容并将其存储在第二个列表(foundCodes)中。
然后我会比较这些列表。
我在 6.143.993 行的表格上进行测试。
只选择一个列(描述)到“缓存”花了1'29“。
另一方面查询如下:
select distinct description from ItemDetail where description in ( 'abc','cddd','xxx' )
花了0'58“。
<强>更新强>
Code
列上的索引可能有助于提升效果。