1

我在最简单的一段 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 等。

知道是什么原因造成的以及如何解决吗?谢谢!

4

1 回答 1

1

使用允许您指定 a的ExecuteReader重载并按照此 MSDN 主题中的建议CommandBehavior传递可能会有所帮助:CommandBehavior.SequentialAccess

检索大数据 (ADO.NET)

于 2012-11-03T22:26:39.650 回答