System.Transaction (TransactionScope) 与 可提升 (Promotable) 交易
这是我的备份,原文请看 http://www.dotblogs.com.tw/mis2000lab/archive/2014/11/12/transactionscope_promotable_transaction_net45.aspx
书本下集,有一章提及数据库交易与ADO.NET的用法
最简单的就是使用 System.Transaction命名空间里面的「TransactionScope」来做
提醒您:
请先动手「加入参考」,才能呼叫 System.Transaction这个命名空间!
微软MSDN上面有篇文章,我看了还是不懂
套用我的方法,做中学
直接看程序代码
做了以后再来看文字讨论(抽象概念)
果然一次就搞懂了
................................................................................................................................................
数据源:与 SQL Server 进行
System.Transactions 整合
以下范例示范如何针对由两个不同的 SqlConnection对象(两个DB链接),
并包装于
TransactionScope区块中的两个不同 SQL Server实例,建立可提升(Promotable)交易。
using
(TransactionScope scope = new TransactionScope())
{
// 第一个 DB连结
程序代码会使用 using…区块来建立
TransactionScope区块,并开启第一个连接,这样会自动在
TransactionScope中登记它。
一开始交易登记为「轻量型(本机)交易」,而不是完全分布式交易。
using
(SqlConnection conn1 = new SqlConnection(connectString1))
{
try {
conn1.Open();
SqlCommand com1 = new SqlCommand(SqlStr1, conn1);
com1.ExecuteNonQuery();
// 第二个 DB连结
只有当第一个连接中的Command”没有”掷回例外状况时,第二个连接才会登记于 TransactionScope中。
开启第二个连接时,交易会自动提升为「完全分布式交易」。
using
(SqlConnection conn2 = new SqlConnection(connectString2))
try {
conn2.Open();
SqlCommand com2 = new SqlCommand(SqlStr2, conn2);
com2.ExecuteNonQuery();
}
catch (Exception ex2) {
// 例外状况
}
}
catch (Exception ex1) {
// 例外状况
}
}
scope.Complete();
//此时,系统会叫用 .Complete()方法,只有在”没有掷回”任何例外状况时才会认可交易。
}
................................................................................................................................................
从第一个连结 "成功"以后(登记为「轻量型(本机)交易」),
然后进入第二个连结(自动提升为「完全分布式交易」),
...... 这样的步骤就是「可提升(Promotable)交易」。
回头看看 MSDN上面讲过的这句话--
「除了增强程序设计之外,在处理交易时System.Transactions命名空间还会与 ADO.NET一起运作协调出最佳效能。
可提升的(Promotable)交易可以依照实际状况,自动提升为”完全分布式”交易的轻量型(本机)交易(lightweight
(local) transaction)」
先做过一次,再来参阅理论(抽象观念),
是不是更清楚了呢?
相关文章,请参阅微软MSDN
与 SQL Server 进行 System.Transactions 整合
http://msdn.microsoft.com/zh-tw/library/ms172070(v=vs.110).aspx
System.Transaction (TransactionScope) 与 可提升 (Promotable) 交易的更多相关文章
- 事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)
1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是 ...
- 如何避免误用分布式事务(System.Transactions.TransactionScope)
以下内容来源与:http://www.cyqdata.com/cyq1162/article-detail-54453 1:本地事务DbTransaction和分布式事务TransactionScop ...
- 将不确定变为确定~transactionscope何时提升为分布式事务~SQL2005与SQL2008不同
回到目录 Transactionscope何时被提升为分布式事务,即时要触发msdtc服务,这个问题与数据库版本有关,在前面的文章中,我的MSTDC系列出现了多个版本,有一点没有说清楚,测试的环境不同 ...
- EntityFramework与TransactionScope事务和并发控制
最近在园子里看到一篇关于TransactionScope的文章,发现事务和并发控制是新接触Entity Framework和Transaction Scope的园友们不易理解的问题,遂组织此文跟大家共 ...
- 谈谈分布式事务之三: System.Transactions事务详解[上篇]
在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务..NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集 ...
- TransactionScope的使用
本文导读:在实际开发工作中,执行一个事件,然后调用另一接口插入数据,如果处理逻辑出现异常,那么之前插入的数据将成为垃圾数据,我们所希望的是能够在整个这个方法定义为一个事务,TransactionSco ...
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程
今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...
- Spring.NET的中间数据层(Middle Tier Data Access)——事务管理(Transaction management)
简介 Spring.NET为事务管理提供了一个持久化抽象(consistent abstraction ),其优点如下: 为不同事务API,例如ADO.NET,Enterprise Services, ...
随机推荐
- 动画的特效Interpolator
AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速 AccelerateInterpolator 在动画开始的地方速率改变比较慢 ...
- 【转】windows和linux间共享互传文件
原文:http://blog.guorunmin.cn/2015/09/16/windows%E5%92%8Clinux%E9%97%B4%E5%85%B1%E4%BA%AB%E4%BA%92%E4% ...
- UIView之基础控件综合事例
九宫格算法实现及优化 2015年11月19日 星期四 23:21 1.九宫格之初实现 要求: 1.1在主界面中,点击添加按钮就能添加商品,点击删除按钮就能删除商品; 1.2在初始化界面中,添加按钮处于 ...
- 翻译:Knockout 快速上手 - 2: 安装 knockoutJS
只需要五个简单的步骤,就可以做好使用 Knockout 开发的准备! 第一步 我们需要什么? 最低限度,为了完成后面的教程,你需要如下的准备 Web 浏览器 文本编辑器 你的电脑上大约 2M 的磁盘空 ...
- tomcat, jdk, eclipse, ant的安装,设置及常见问题
1.tomcat 安装: 安装版:在官方下载tomcat的安装版,根据提示一步步操作,很简单的 解压版:在官方下载tomcat的解压版,放到要安装的目录中解压版即可 同以前的找到设置环境变量的地方. ...
- maven搭建项目的时候,src/main/java无法建立的问题,提示信息The folder is already a source folder.(文件夹已经是源文件夹。)
原因:maven自己引的jdk包不对,需要重新引包 操作方式: 1.在项目上右击(或用快捷键ALT+ENTER),打开properties-->java builder path-->re ...
- 跟我学 NHibernate (二)
1. 在 NHibernate 中使用事务, 主要代码如下: #region 事务 public IList<Customer> GetAll() { // 开启事物 using (ITr ...
- 【MySQL】MySQL索引背后的之使用策略及优化【转】
转自:http://database.ctocio.com.cn/353/11664853.shtml 另外很不错的对于索引及索引优化的文章: http://www.cnblogs.com/magia ...
- windows live writer向cnblog发布文章设置(转)
Windows Live Writer是非常不错的一个日志发布工具,支持本地写文章,非常方便将word 中内容,包括图片进行处理,有点感觉相见恨晚. Live Writer最新版本下载地址是什么? h ...
- gulp.spriteSmith使用
var gulp = require('gulp'); var spritesmith = require('gulp.spritesmith'); gulp.task('sprite', funct ...