0

ADO.NETSqlDataReaderで問題が発生しています。基盤となるストアドプロシージャをSSMSで直接実行すると、170万件のレコードが返されます。ADO.NET DataTableを埋める関連するVB.NETコードを実行すると、170万のレコードも取得します。

しかし、ループを実行してこのような汎用リストを埋めると

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

返されるレコードははるかに少なく、その数は変わる可能性があります。ループの最後で、m_aFullIDList.Count100000または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 に答える