MultipleActiveResultSets = 참 또는 다중 연결?


85

연결 ( ExecuteReader)에서 리더를 만든 다음 해당 리더의 모든 행에 대해 다른 명령 (사용 ExecuteNonQuery)을 수행 하는 C #이 있습니다 . 이 경우 MultipleActiveResultSets=True연결에서 사용하거나 여러 연결을 사용하는 것이 더 낫 습니까?

답변:


98

이러한 유형의 작업을 위해 특별히 MARS (Multiple Active Result Set)가 추가되었으므로 SqlDataReader에서 읽고 추가 일괄 처리를 실행하기 위해 동시에 두 개의 연결을 열 필요가 없습니다.

MARS는 SQL Server 2005 이상과 호환됩니다. MSDN 문서에서 인용하려면 :

MARS (Multiple Active Result Set)가 도입되기 전에 개발자는 특정 시나리오를 해결하기 위해 다중 연결 또는 서버 측 커서를 사용해야했습니다.

자세한 내용은 다음을 참조하십시오.

MSDN 라이브러리-MARS 개요

데이터 읽기 및 업데이트 작업 예제 :

MSDN Library-데이터 조작 (MARS) 'MARS로 데이터 읽기 및 업데이트'까지 아래로 스크롤합니다.


21

이것은 내가 MARS가 추가 된 이유를 아는 한입니다. 그렇기 때문에 그것을 사용해야한다고 생각합니다.


0

이를 테스트하는 가장 좋은 방법은 SQLServer Profiler를 실행하고 서버 측에서 실제로 어떤 일이 발생하는지 확인하는 것입니다.

내 생각 엔 ExecuteNonQuery ()를 사용하고 있기 때문에 더 좋지 않을 것입니다. 따라서 실제로 여러 결과로 작업하지 않습니다.


6
이것이 제가 코드를 작성할 때 생각했던 것입니다. 그러나 MultipleActiveResultSets = True가 없으면 "먼저 닫아야하는이 명령과 관련된 열린 DataReader가 이미 있습니다."라는 메시지가 나타납니다. ExecuteNonQuery에 대한 예외입니다.
Sprintstar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.