如果发生错误, using 语句是否会回滚数据库事务?
- 作者: 叫我小瘦子-
- 来源: 51数据库
- 2022-10-20
问题描述
我在 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.
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
