我在最简单的一段 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 万条时,结果变得不可预测。
例如,当我知道 SP 返回 150 万条记录时 - 通用列表中的最终记录数可能是 200K、500K 等。
知道是什么原因造成的以及如何解决吗?谢谢!