0

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

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

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

它返回的记录要少得多,而且这个数字可能会有所不同。在循环结束时,如果我检查m_aFullIDList.Count它可能是 100000 或 500000 等。知道为什么以及如何解决它吗?谢谢!

4

2 回答 2

2

感谢@Tim Schemlter 指出的参考资料,我找到了用于创建DataReader 的选项“CommandBehavior.SequentialAccess”。这解决了这个问题。例如,而不是

drReader = oCommand.ExecuteReader();

采用

drReader = oCommand.ExecuteReader(CommandBehavior.SequentialAccess);

它工作正常。

于 2012-09-17T17:28:51.820 回答
0

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

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

于 2012-09-17T17:22:37.717 回答