SqlDataReader不读取所有记录

时间:2012-11-03 22:06:43

标签: sql vb.net stored-procedures sqldatareader datareader

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

知道是什么导致它以及如何解决它?谢谢!

1 个答案:

答案 0 :(得分:1)

使用允许您指定CommandBehavior的{​​{3}}并按照此MSDN主题中的建议传递CommandBehavior.SequentialAccess可能有所帮助:

ExecuteReader overload