문제

내가 사용합니다.NET2.0SQL Server2005.역사적 이유로,응용 프로그램 코드를 사용하 SQLTransaction 지만,일부 의 저장 프로시저는 또한 T-SQL 을 사용하기 시작/실행/롤백 tran 문입니다.아이디어는 DBTransaction 할 수 있는 기간 저장된 절차에는 각 개인 sproc 컨트롤에 무슨 일이 일어나 그것의 범위에서 효과는 이러한 중첩된 거래입니다.

이전 행동의 코드는 경우 sprocs,실패 응용 프로그램 논리는 것도 원인이 외부 SQLTransaction 도 rollback.하지만 지금은 우리가 원하도록 논리를 변경하는 경우에도,실패가 있고,외부 거래는 계속 실행하면 나머지 sprocs 에 그 순서는 다음 끝에서,우리가 알고 있기 때문에 거의 실패,우리는 롤백체 SQLTransaction.

문제는 적어도 그것은 현재,코딩이 있는 경우 sprocs 않 ROLLBACK,외부 SQLTransaction 그 연결을,그 이후 모든 시도에 재사용하는 트랜잭션이 실패합니다.이 있을 수 있는 방법에 rollback T-SQL 하지만 여전히 유지하는 외부 SQLTransaction?내가 생각하는 어쩌면 저장점이 도움이 될 수 있지만,나는 그들을 이해하지 못하는 매우 바랍니다.

무엇을 복잡하게 이 상황은 없는지 항상 외부 트랜잭션,그래서 내가 할 수 있지 않을 제거하 T-SQL 롤백,ie.때때로 sproc 에서 실행하는 자때로는 컨텍스트에서 트랜잭션이 있습니다.

것 전환 TransactionScope 것을 쉽게?

덕분에 어떤 제안을 위해...마이크

도움이 되었습니까?

해결책

이 Knowledgebase 항목을 살펴보십시오.

데이터 소스 오류가 발생한 후 트랜잭션이 커밋되거나 롤백 될 때 예상치 못한 예외가 발생할 수 있습니다.

저장된 Proc 내에서 거래를 롤백하면 Ado.net 클라이언트의 "외부"트랜잭션이 사라집니다. 유일한 해결책은 롤백 () 호출을 시도/캐치 블록으로 래핑하는 것입니다. 그런 일이 발생하면 외부 거래를 유지할 수 있다고 생각하지 않습니다.

다른 팁

할 것을 제안 고려를 외부에서 트랜잭션은 저장된 절차뿐만 아니라 그래서 유지되는 모든 중첩에 TSQL(사용 EXEC 전화를 다른 저장 프로시저).SQL Server 놀라 울 정도로 풍부한 개발/데이터 관리 환경을 허용할 것을 트랜잭션을 관리하는 방법에는 ADO 서투르게 손잡이.유지 너무 마음에,그것은 거의 항상 더 효율적으로 갱 무리의 SQL 함께서 저장된 발동하는 것보다 여러 통화를 통해 ADO 연결합니다.

당신이 보는 것이 관심이있을 수 있습니다 implicit_transaction 기본적으로 저장 프로 시저의 트랜잭션 종속 모드를 변경할 수 있습니다. 이것은 많은 경우 더 쉬운 솔루션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top