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가 면역 적이라고 가정했습니다 (하!). 참된? 그릇된?
실제 구현은 제대로 작동하는 것처럼 잘 작동합니다. 테이블이 잠기지 않도록 확실히 레코드를 업데이트했지만 정렬 순서에 영향을 줄 수있는 필드는 변경하지 않았습니다. – SeaDrive
2 번과 비슷한 소리가납니다. 트랜잭션 로그에 보관되는 위치를 업데이트합니다. 그것 또는 당신은 어딘가 약한 격리 수준을 설정하고 있습니다. –