我在 using 语句中有一个 IDbTransaction,但我不确定如果在 using 语句中抛出异常,它是否会回滚.我知道 using 语句将强制调用 Dispose()...但是有谁知道 Rollback() 是否也是如此?
I've got an IDbTransaction in a using statement but I'm unsure if it will be rolled back if an exception is thrown in a using statement. I know that a using statement will enforce the calling of Dispose()...but does anyone know if the same is true for Rollback()?
更新:另外,我是否需要像下面那样显式调用 Commit() 或者这也会由 using 语句处理?
Update: Also, do I need to call Commit() explicitly as I have below or will that also be taken care of by the using statement?
我的代码看起来像这样:
My code looks sort of like this:
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 的类不执行.因此,从事务的角度来看,它依赖于实现.
Dispose method for transaction class performs a rollback while Oracle's class doesn't. So from transaction's perspective it's implementation dependent.
另一方面,连接对象的 using 语句要么关闭与数据库的连接,要么在重置连接后将连接返回到池中.无论哪种情况,都应该回滚未完成的事务.这就是为什么异常永远不会留下活动事务的原因.
The using statement for the connection object on the other hand would either close the connection to the database or return the connection to the pool after resetting it. In either case, the outstanding transactions should be rolled back. That's why an exception never leaves an active transaction lying around.
另外,是的,您应该显式调用 Commit().
Also, yes, you should call Commit() explicitly.
这篇关于如果发生错误, using 语句是否会回滚数据库事务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
LINQ to SQL 和并发问题LINQ to SQL and Concurrency Issues(LINQ to SQL 和并发问题)
try/catch 块的收益回报Yield return from a try/catch block(try/catch 块的收益回报)
重用带有事务的 SqlCommand 时,我应该调用 ParameShould I call Parameters.Clear when reusing a SqlCommand with a transation?(重用带有事务的 SqlCommand 时,我应该调用 Parameters.Clear 吗
SqlTransaction 是否需要调用 Dispose?Does SqlTransaction need to have Dispose called?(SqlTransaction 是否需要调用 Dispose?)
System.Transactions.TransactionInDoubtException 的原因Reason for System.Transactions.TransactionInDoubtException(System.Transactions.TransactionInDoubtException 的原因)
如何将 TransactionScope 与 MySql 和实体框架一起使用How do I use TransactionScope with MySql and Entity Framework? (getting Multiple simultaneous connections...are not currently supported error)(如何将