오류가 발생하면 사용 명령문이 데이터베이스 트랜잭션을 사용합니까?
-
22-07-2019 - |
문제
사용 명령문에서 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()
호출되지 않은 경우 거래가 자동으로 롤백됩니다.
제휴하지 않습니다 StackOverflow