2017-03-23 13 views
0

웹 응용 프로그램에서 트랜잭션 범위를 구현했습니다. 그것은 모든 것을 커밋하거나 롤백해야 할 때 잘 동작합니다. 하지만 때때로 디버깅하는 동안 트랜잭션이 완료되기 전에 서비스를 중지하면 트랜잭션이 잠긴 것입니다. 테이블은 잠긴 상태로 표시되며 Visual Studio를 닫은 후에도 특정 세션이 데이터베이스에 남아 있습니다. 언젠가 이런 일이 일어나고 그 부분 트랜잭션이 롤백되지 않습니다. 또한 트랜잭션 스코프에 대한 시간 제한을 설정했습니다. 여전히 문제가 발생하고 있습니다. 거기에 어쨌든 servce가 inbetween 사이에 중지 된 후 테이블 작업을 중단 할 수 있습니까?ADO .NET 트랜잭션 범위가 중지 된 후에도 트랜잭션을 잠급니다.

답변

0

TransactionScope를 사용해야합니까? 그렇지 않은 경우 연결에 연결된 SqlTransaction을 사용할 수 있습니다. Details

데이터베이스 엔진 인스턴스에 대한 클라이언트의 네트워크 연결이 끊어지면

, 연결에 대한 미결제 거래 네트워크가 휴식의 인스턴스를 통지 할 때 이 롤백됩니다. 클라이언트 응용 프로그램이 실패하거나 클라이언트 컴퓨터가 다운되거나 이 다시 시작되면이 또한 연결을 끊고 네트워크에서 중단을 알리는 경우 데이터베이스 엔진 인스턴스가 해결되지 않은 연결을 롤백합니다. 클라이언트가 응용 프로그램에서 로그 오프하면 미해결 트랜잭션이 롤백됩니다.

using (SqlConnection cn = new SqlConnection("YOUR CONNECTION")) 
{ 
    cn.Open(); 
    using (SqlTransaction tr = cn.BeginTransaction()) 
    { 
     // your transactional code 
     tr.Commit(); 
    } 
}