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
{
/// <summary>
/// 演示失败例子
/// </summary>
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语句,
}
}
/// <summary>
/// 演示成功例子
/// </summary>
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);
}
}
}
}
使用TransactionScope(轻量级事务)实现数据库操作事务的更多相关文章
-
浅谈.net中数据库操作事务
.net中的事务 关键几点 概念:1:什么是事务 2:什么时候用事务 3:基本的语法 (1): 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常 ...
-
(二)Redis 笔记——发布&;订阅、事务、数据库操作
1. Redis 发布订阅 1.1 概述 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下 ...
-
Codeigniter 数据库操作事务情况下获取不到last_insert_id()
开发中,数据库Insert使用了事务,如果 $this->db->insert_id() 放在 $this->db->trans_complete(); 这句语句之后,$thi ...
-
数据库操作事务IsolationLevel 枚举
成员名称 说明 Chaos 无法覆盖隔离级别更高的事务中的挂起的更改. ReadCommitted 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复 ...
-
最终一致性2PC复杂场景,事务报数据库操作超时。
稀里糊涂的,忘了开启SqlServer的is read committed snapshot on
-
Yii2数据库操作 事务
Yii2 DAO http://blog.csdn.net/hzqghost/article/details/44116039
-
Oracle数据库之事务
Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...
-
小菜鸟之Oracle数据库之事务
Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...
-
一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
随机推荐
-
PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper 我下的是 里面包含了搭建PHP必须的4个软件: 1. ...
-
用c++builder读取一个一行有多行变量的文件
文件内容如下: C DXDY.INP FILE, IN FREE FORMAT ACROSS COLUMNS for 83658 Active CellsC 2013-5-25 上午 10:43 ...
-
键盘KeyCode值列表
event.keycode值大全1 keycode 8 = BackSpace BackSpace 2 keycode 9 = Tab Tab 3 keycode 12 = Clear 4 keyco ...
-
Spring学习笔记(二)
1.Spring MVC 返回json数据 <bean class="org.springframework.web.servlet.mvc.annotation.Annotation ...
-
Java程序员的情书
java程序员的情书 我能抽象出整个世界但是我不能抽象出你因为你在我心中是那么的具体所以我的世界并不完整我可以重载甚至覆盖这个世界里的任何一种方法但是我却不能重载对你的思念也许命中注定了 你在我的世界 ...
-
USACO 2017 January Platinum
因为之前忘做了,赶紧补上. T1.Promotion Counting 题目大意:给定一个以1为根的N个节点的树(N<=100,000),每个节点有一个权值,对于每个节点求出权值比它大的子孙的个 ...
-
在Github和oschina上搭建自己的博客网站
在Github上搭建 - 参考链接 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门 GitHub + Jekyll 搭建并美化个人网站 用Jekyll搭建的Git ...
-
Linux 设置IP地址,并能连接外网
1,如果是 centos6,请修改 vi /etc/sysconfig/network-scripts/ifcfg-eth0 2,如果是 centos7,请修改 => vi /etc/sysc ...
-
mysql 数据库名称,中间带有中划线问题
插入数据时候,引用了数据库名,数据库名中有横线,会提示错误: You have an error in your SQL syntax; check the manual that correspon ...
-
IntelliJ IDEA使用技巧整理
1 .写代码时用 Alt-Insert ( Code|Generate… )可以创建类里面任何字段的 getter 与 setter 方法. 2 .右键点击断点标记(在文本的左边栏里)激活速查菜单,你 ...