我在最简单的VB.NET代码中遇到了一个非常奇怪的问题:
Public Sub ReadIDs(i_oDataReader As Data.SqlClient.SqlDataReader)
m_aFullIDList = New Generic.List(Of Integer)
While i_oDataReader.Read
If i_oDataReader.IsDBNull(0) = False Then
m_aFullIDList.Add(i_oDataReader.GetInt32(0))
End If
End While
m_iTotalNumberOfRecords = m_aFullIDList.Count
End Sub
基本上,过程接受DataReader作为参数,循环读取器中的所有记录,将它们添加到整数的通用列表中。
当读取器后面的SQL存储过程返回相对少量的记录(低于100K)时,读取器读取所有记录,最终计数与结果集匹配。但是当记录数量超过100万时 - 结果变得无法预测。
E.g。当我知道SP重新发布了1.5M的记录时 - 通用列表中的最终记录数可能是200K,500K等。
知道是什么导致它以及如何解决它?谢谢!
答案 0 :(得分:1)
使用允许您指定CommandBehavior
的{{3}}并按照此MSDN主题中的建议传递CommandBehavior.SequentialAccess
可能有所帮助: