2017-03-20 14 views
0

ASP.NET 응용 프로그램에서 여러 SQL 트랜잭션을 실행합니다. 하나의 트랜잭션은 여러 저장 프로 시저를 하나씩 실행합니다. 트랜잭션은 상당히 오래 실행되는 트랜잭션입니다.롤백 된 SqlTransaction 인스턴스에서 모든 명령을 다시 실행하는 방법은 무엇입니까?

응용 프로그램의 두 인스턴스, 즉 두 개의 서로 다른 프로세스가 하나의 데이터베이스에 연결될 때 SQL 데드락 문제가 발생합니다. 이 경우 SQL Server는 자동으로 하나의 프로세스에서 트랜잭션을 롤백합니다.

이 경우 롤백 된 SqlTransaction에 모든 명령 (저장 프로 시저)을 실행하고 싶습니다.

어떻게 C#에서이 작업을 수행 할 수 있습니까?

트랜잭션이 SQL 서버에 의해 롤백되기 전에 실행 된 SQL 트랜잭션의 모든 명령을 쉽게 다시 실행할 수 있습니까?

또는 내가 수행 한 모든 저장 프로 시저를 "기억"(필요할 때마다 다시 실행)하는 자체 논리를 작성해야합니까?

+3

사용자 코드를 다시 입력해야합니다. 따라서 "자신의 논리"에 대한 마지막 진술이 맞습니다. –

답변

1

실제로 dev에 당신은 롤백에 대한 문제가 무엇인지 알아야하고 그래서 심지어 내가 뭔가를 잘못하면 각 SP 실행 후 int의 플래그를 선언하고 그것을 증가라고 말할 것이라고 수정해야 할 나쁜 연습 당신이 롤백을 작성한 catch 섹션에서 플래그에 따라 sps를 호출하면됩니다. 다시 이렇게 잘못되었습니다.

+1

원칙적으로, 귀하는 정확합니다. 그러나 때로는 이와 같은 방어 코드를 작성해야합니다. 특히 문제와 같은 SQL 교착 상태가 발생하고 다양한 기술 및 비 기술적 이유로 인해 필요한 데이터베이스 수준 변경을 곧 수행 할 수없는 경우가 있습니다. – Learner

+0

네, 맞아요.하지만 교착 상태를 피하기 위해 필요에 따라 데이터베이스를 구성해야합니다. 격리 수준 설정에 따라 잠금 설정은 다음과 같은 상황을 피할 수 있습니다. –