SqlDataReaderを使用する場合、ExecuteReaderステップで完全に決定された戻り値セットですか?また、読み込み中にソーステーブルに書き込むことで何を得ることができますか?ここでは非常に荒い擬似コードの例を示します。SqlDataReader - 結果セットはキャッシュされていますか?
sc = new SqlCommand("select * from people order by last, first",db) ;
sdr = sc.ExecuteReader() ;
while (sdr.read())
{
l = (string) sdr["last"] ;
k = (string) sdr["key"] ;
if (l.Equals("Adams"))
{
sc2 = new SqlCommand("update people set last = @nm where key = @key") ;
sc2.Parameters.Add(new SqlParameter("@nm", "Ziegler"));
sc2.Parameters.Add(new SqlParameter("@key", k));
sc2.ExecuteNonQuery() ;
}
}
読んでいるテーブルに書き込むことによって他の環境で多くの悪いエラーが発生しました。ここでは、レコードkがリストの先頭(アダムス)から一番下(チーグラー)にぶつかる。私は、SqlDataReaderが無害であると仮定しました(ha!)。本当ですか?偽ですか?
私の実際の実装は、わかりやすくうまく機能しました。テーブルがロックされないようにレコードを確実に更新しましたが、ソート順に影響するフィールドは変更しませんでした。 – SeaDrive
2番目のように聞こえます。更新はトランザクションログに保存されます。それともあなたはどこか弱い隔離レベルを設定しています。 –