문제

사용 명령문에서 IDBTransaction이 있었지만 사용 명령문에서 예외가 발생하면 롤백 될지 확실하지 않습니다. 사용 명령문은 dispose ()의 호출을 시행한다는 것을 알고 있습니다. 그러나 롤백 ()에 대해서도 마찬가지인지 아는 사람이 있습니까?

업데이트: 또한 아래에있는 것처럼 Commit ()에게 명시 적으로 Commit ()를 호출해야합니까?

내 코드는 다음과 같이 보입니다.

using Microsoft.Practices.EnterpriseLibrary.Data;

...

using(IDbConnection connection = DatabaseInstance.CreateConnection())
{
    connection.Open();

    using(IDbTransaction transaction = connection.BeginTransaction())
    {
       //Attempt to do stuff in the database
       //potentially throw an exception
       transaction.Commit();
    }
}
도움이 되었습니까?

해결책

트랜잭션 클래스를위한 방법은 롤백을 수행하는 반면 Oracle의 클래스는 그렇지 않습니다. 따라서 트랜잭션의 관점에서 구현에 따라 다릅니다.

그만큼 using 반면에 연결 객체에 대한 명령문은 데이터베이스에 연결을 닫거나 재설정 후 풀에 연결을 반환합니다. 두 경우 모두 미결제 거래를 롤백해야합니다. 그렇기 때문에 예외는 적극적인 거래를 떠나지 않습니다.

또한, 당신은 전화해야합니다 Commit() 명시 적으로.

다른 팁

Commit에게 전화해야합니다. 사용 진술은 당신을 위해 아무것도 약속하지 않을 것입니다.

예외가 있다면 Commit() 호출되지 않은 경우 거래가 자동으로 롤백됩니다.

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