Sql server SqlDataReader不会返回所有记录

Sql server SqlDataReader不会返回所有记录,sql-server,ado.net,sqldatareader,Sql Server,Ado.net,Sqldatareader,我遇到ADO.NET SqlDataReader的问题。当我直接在SSMS中运行底层存储过程时,它返回170万条记录。当我运行填充ADO.NET数据表的相关VB.NET代码时,我还得到170万条记录 但是当我运行一个循环来填充这样的通用列表时 While i_oDataReader.Read m_aFullIDList.Add(i_oDataReader.GetInt32(0)) End While 它返回的记录要少得多,而且数量可能会有所不同。在循环结束时,如果我检查m\u aFull

我遇到ADO.NET SqlDataReader的问题。当我直接在SSMS中运行底层存储过程时,它返回170万条记录。当我运行填充ADO.NET数据表的相关VB.NET代码时,我还得到170万条记录

但是当我运行一个循环来填充这样的通用列表时

While i_oDataReader.Read
   m_aFullIDList.Add(i_oDataReader.GetInt32(0))
End While

它返回的记录要少得多,而且数量可能会有所不同。在循环结束时,如果我检查
m\u aFullIDList.Count
它可能是100000或500000等。知道为什么以及如何修复它吗?谢谢

您尝试过使用GetInt64()方法吗?我意识到只有170万条记录,GetInt32()方法应该足够大;我只是好奇而已


另外,如果您认为SQL无法跟上DataReader,您是否尝试过在循环中添加等待以使其跟上?

多亏了@Tim Schemlter指出的引用,我找到了创建DataReader的选项“CommandBehavior.SequentialAccess”。这解决了问题。例如,代替

drReader = oCommand.ExecuteReader();
使用


它工作正常。

是否出现异常,可能是a?不,循环运行时没有任何错误,只是末尾的计数错误。这听起来很傻,但似乎SQL Server无法赶上DataReader,在返回完整结果之前循环就完成了。但实际上,您的引用为我指明了正确的方向。在创建DataReader时添加“CommandBehavior.SequentialAccess”修复了该问题!谢谢:)不,不是blob,纯整数,而是很多。有趣的是,直接在SSMS中执行查询大约需要14秒,但执行上面的循环只需要大约1秒。
drReader = oCommand.ExecuteReader(CommandBehavior.SequentialAccess);