博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础才是重中之重~.net中的显式事务与隐式事务
阅读量:6192 次
发布时间:2019-06-21

本文共 1473 字,大约阅读时间需要 4 分钟。

.net中的事务可以分为显式的和稳式的,显式的就是说需要我们手动去指定事务的提交和回滚,而稳式的是.net帮助我们进行管理的,当你的事务代码段没有发生异常时,它会帮助我们进行提交,反之,进行事务加滚,这也是合情合理的。

以下是MSDN中的说明:

CommittableTransaction 类为应用程序使用事务提供了一种显式方法,而不是隐式地使用  类。与 TransactionScope类不同,应用程序编写器需要明确调用  和  方法以提交或中止事务。但是,只有事务的创建者才能提交事务。因此,通过  方法获得的可提交事务的副本不是可提交的。

显式事务:

创建 CommittableTransaction 不会自动设置环境事务(环境事务是您的代码在其中执行的事务)。可以通过调用全局  对象的静态  属性获取或设置环境事务。有关环境事务的更多信息,请参见  主题的“Managing Transaction Flow using TransactionScopeOption”(使用 TransactionScopeOption 管理事务流)一节。如果未设置环境事务,资源管理器上的任何操作都不属于该事务。您需要显式设置或重置环境事务,以确保资源管理器在正确的事务上下文中进 行操作。

在提交 CommittableTransaction 之前,事务所涉及的所有资源仍然是锁定的。

CommittableTransaction 对象不能被重用。一经提交或回滚,就不能在事务中再次使用它或将它设置为当前环境事务上下文。

稳式事务:

在通过 new 语句实例化 TransactionScope 时,事务管理器将确定要参与哪个事务。一经确定,此范围将始终参与该事务。此决策基于两个因素:是否存在环境事务以及构造函数中 TransactionScopeOption 参数的值。环境事务是在其中执行您的代码的事务。通过调用 Transaction 类的  静态属性可获取对环境事务的引用。有关如何使用此参数的更多信息,请参见  主题的“事务流管理”一节。

如果在事务范围中(即从初始化 TransactionScope 对象到调用其  方法之间)未发生异常,则允许该范围所参与的事务继续。如果事务范围中的确发生了异常,它所参与的事务将回滚。

当应用程序完成它要在一个事务中执行的所有工作以后,您应当只调用  方法一次,以通知事务管理器可以接受提交事务。未能调用此方法将中止该事务

对 Dispose 方法的调用标志着该事务范围的结束。在调用此方法之后发生的异常不会影响该事务。

如果在范围中修改 Current 的值,则会在调用 Dispose 时引发异常。但是,在该范围结束时,先前的值将被还原。此外,如果在创建事务的事务范围内对 Current 调用 Dispose,则该事务将在相应范围末尾处中止。

建立使用事务的格式为:

1 using (TransactionScope scope = new TransactionScope()) 2 { 3  try 4   { 5     //代码段 6     scope.Complete(); 7   } 8  catch(exception) 9  {10    throw;11  }12   finally13  {14    scope.Dispose();//手动释放事务 15  }16  }17 }

感谢您的阅读。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
SqlServer自动锁定sa解决代码
查看>>
JS基础知识——原型与原型链
查看>>
从零开始编写自己的C#框架(20)——框架异常处理及日志记录
查看>>
C#中消息的工作流程
查看>>
【转】Python之正则表达式(re模块)
查看>>
訪問索引的方法
查看>>
python中global 和 nonlocal的使用
查看>>
指针面试题
查看>>
java Date时间的各种转换方式和Mysql存时间类型字段的分析
查看>>
UINavigationController navigationBar 隐藏方法
查看>>
Android开发BUG及解决方法
查看>>
collectionview 的相关设置
查看>>
centos 7 上配置mysql 开机启动详解
查看>>
【node.js】回调函数
查看>>
运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分
查看>>
Sqrt(x) II
查看>>
关于jvm运行时时区的总结
查看>>
编程算法 - 两个升序列的同样元素 代码(C)
查看>>
Regular Expression Matching
查看>>
Phalcon 訪问控制列表 ACL(Access Control Lists ACL)
查看>>