SqlDataReader を使用する場合、戻り値セットは ExecuteReader ステップによって完全に決定されますか? または、読み取り中にソース テーブルに書き込むことによって取得するものに影響を与えることができますか? これは非常に大まかな疑似コードの例です。
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 はリストの一番上 (Adams) から一番下 (Ziegler) にバンプされます。私は、SqlDataReader が免疫があると仮定しました (ha!)。真実?間違い?