我遇到了ADO.NET SqlDataReader的问题。当我直接在SSMS中运行底层存储过程时 - 它返回170万条记录。当我运行填充ADO.NET DataTable的相关VB.NET代码时 - 我还获得了170万条记录。
但是当我运行循环来填充像这样的通用列表时
While i_oDataReader.Read
m_aFullIDList.Add(i_oDataReader.GetInt32(0))
End While
它返回的记录少得多,而且这个数字可能会有所不同。在循环结束时,如果我检查m_aFullIDList.Count
它可能是100000或500000等。任何想法为什么以及如何解决它?谢谢!
答案 0 :(得分:2)
感谢@Tim Schemlter提到的引用,我找到了用于DataReader创建的选项“CommandBehavior.SequentialAccess”。这解决了这个问题。例如。而不是
drReader = oCommand.ExecuteReader();
使用
drReader = oCommand.ExecuteReader(CommandBehavior.SequentialAccess);
并且它可以正常工作。
答案 1 :(得分:0)
您是否尝试过使用GetInt64()方法?我意识到,只有只有 170万条记录,GetInt32()方法应该足够大;我更好奇。
另外,如果您认为SQL无法跟上DataReader,您是否尝试在循环中添加等待以使其能够赶上?