programing tip

오류가 발생하면 using 문이 데이터베이스 트랜잭션을 롤백합니까?

itbloger 2020. 10. 8. 07:47
반응형

오류가 발생하면 using 문이 데이터베이스 트랜잭션을 롤백합니까?


using 문에 IDbTransaction이 있지만 using 문에서 예외가 발생하면 롤백되는지 확실하지 않습니다. using 문이 Dispose () 호출을 강제 할 것이라는 것을 알고 있지만 Rollback ()에 대해서도 동일한 지 아는 사람이 있습니까?

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

내 코드는 다음과 같습니다.

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();
    }
}

트랜잭션 클래스에 대한 Dispose 메서드는 롤백을 수행하지만 Oracle 클래스는 수행하지 않습니다. 따라서 트랜잭션의 관점에서 구현에 따라 다릅니다.

using다른 한편으로는 연결 개체에 대한 문 중 하나를 데이터베이스에 연결을 종료하거나 재설정 한 후 풀에 대한 연결을 반환합니다. 두 경우 모두 미결 트랜잭션을 롤백해야합니다. 그렇기 때문에 예외가 활성 트랜잭션을 절대로 남기지 않는 이유입니다.

또한 예, Commit()명시 적으로 호출해야합니다 .


커밋을 호출해야합니다. using 문은 아무것도 커밋하지 않습니다.


Commit()호출되지 않은 예외가 있으면 트랜잭션이 자동으로 롤백됩니다.

참고 URL : https://stackoverflow.com/questions/641660/will-a-using-statement-rollback-a-database-transaction-if-an-error-occurs

반응형