博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用TransactionScope(轻量级事务)实现数据库操作事务
阅读量:5249 次
发布时间:2019-06-14

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

TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间。它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物。使用之前必须添加对 System.Transactions.dll 的引用。
下列代码就是一个正在创建的事务,这个事务自身还封装了多个数据库查询。只要任意一个 SqlCommand 对象引发异常,程序流控制就会跳出 TransactionScope 的 using 语句块,随后,TransactionScope 将自行释放并回滚该事务。由于这段代码使用了 using 语句,所以 SqlConnection 对象和 TransactionScope 对象都将被自动调用Dispose()释放。由此可见,只需添加很少的几行代码,您就可以构建出一个事务模型,这个模型可以对异常进行处理,执行结束后会 自行清理,此外,它还可以对命令的提交或回滚进行管理。
相对于使用SqlTransaction更方便,项目中经常用到这个。下面就是测试例子,其实try…cacth还可以包含在TransactionScope 的Using语句外,达到同样的效果,只要com执行出错,就不会执行TransactionScope的Complete提交事务,注意TransactionScope是没有回滚事务属性的,只要出了using语句块就会自动回滚事务,相当于封装了【SqlTransaction】,只是让我们使用起来更简结,也就是代码越写越简洁,而不是更多。具体还待各位去测试。
TransactionScope事务例子public static class Testtra    {        ///         /// 演示失败例子               ///                 public static void FailExample()        {            BLL.tbConfigBLL ubll = new tbConfigBLL();            Model.tbConfig tbmodel = new Model.tbConfig { ConfigName = "321", ConfigValue = "1", Flag = 1, Note = "123" };            Model.tbConfig tbmode2 = new Model.tbConfig { ConfigName = "322221", ConfigValue = "1", Flag = 1, Note = "123" };            //创建事务实例            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))            {                try                {                    //1.sql语句写错,                    //2.数据库连接断开都会执行失败,回滚事务                                        ubll.Insert(tbmodel);                    ubll.Insert(tbmode2);                                        ts.Complete();//提交事务                }                catch (Exception ex)                {                    //写入日志                    SystemLog.Log2File("").Error("执行出错", ex);                }                //ts.Complete();//上面执行Ok就会提交事务,如有出错就会执行事务回滚,跳出TransactionScope语句,            }        }        ///         ///  演示成功例子        ///         public static void SuccessExample()        {            BLL.tbConfigBLL bll = new tbConfigBLL();            Model.tbConfig model1 = new Model.tbConfig { ConfigName = "321", ConfigValue = "1", Flag = 1, Note = "123" };                        //创建事务实例            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))            {                try                {                    bll.Insert(model1);                                       ts.Complete();//提交事务                }                catch (Exception ex)                {                    SystemLog.Log2File("SuccessExample").Error("执行出错", ex);                }            }        }    }

转载于:https://www.cnblogs.com/ChiYue/p/3447746.html

你可能感兴趣的文章
如何在vue单页应用中使用百度地图
查看>>
Springboot使用步骤
查看>>
Spring属性注入
查看>>
Springboot-配置文件
查看>>
Springboot-日志框架
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
spring与quartz整合
查看>>
Kattis之旅——Eight Queens
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>