这是我的备份,原文请看  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) 交易的更多相关文章

  1. 事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)

    1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是 ...

  2. 如何避免误用分布式事务(System.Transactions.TransactionScope)

    以下内容来源与:http://www.cyqdata.com/cyq1162/article-detail-54453 1:本地事务DbTransaction和分布式事务TransactionScop ...

  3. 将不确定变为确定~transactionscope何时提升为分布式事务~SQL2005与SQL2008不同

    回到目录 Transactionscope何时被提升为分布式事务,即时要触发msdtc服务,这个问题与数据库版本有关,在前面的文章中,我的MSTDC系列出现了多个版本,有一点没有说清楚,测试的环境不同 ...

  4. EntityFramework与TransactionScope事务和并发控制

    最近在园子里看到一篇关于TransactionScope的文章,发现事务和并发控制是新接触Entity Framework和Transaction Scope的园友们不易理解的问题,遂组织此文跟大家共 ...

  5. 谈谈分布式事务之三: System.Transactions事务详解[上篇]

    在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务..NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集 ...

  6. TransactionScope的使用

    本文导读:在实际开发工作中,执行一个事件,然后调用另一接口插入数据,如果处理逻辑出现异常,那么之前插入的数据将成为垃圾数据,我们所希望的是能够在整个这个方法定义为一个事务,TransactionSco ...

  7. TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE

    TransactionScope事务处理方法介绍及.NET Core中的注意事项   作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...

  8. WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

    今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...

  9. Spring.NET的中间数据层(Middle Tier Data Access)——事务管理(Transaction management)

    简介 Spring.NET为事务管理提供了一个持久化抽象(consistent abstraction ),其优点如下: 为不同事务API,例如ADO.NET,Enterprise Services, ...

随机推荐

  1. ubuntu更换软件源

     ubuntu更换软件源 /etc/apt/source.list 163: deb http://mirrors.163.com/ubuntu/ trusty main restricted u ...

  2. OC基础(20)

    Protocol基本概念 Protocol注意事项 Protocol类型限制 代理设计模式 *:first-child { margin-top: 0 !important; } body > ...

  3. SparkStreaming结合Kafka使用

    spark自带的example中就有streaming结合kafka使用的案例: $SPARK_HOME/examples/src/main/scala/org/apache/spark/exampl ...

  4. 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事

    原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...

  5. Unity Shader:Blur

    花了一晚上的时间终于看懂Image Effect中的Blur,其实很简单,就是一下子没有理解到. 原理:使用两个一维[1*7]的高斯滤波模板,一个用在x方向,另一个用在y方向.高斯滤波有模糊的效果. ...

  6. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  7. 学习总结 DML数据库增删改语句

    insert into score t values('111','3-105',88)--插入一行数据 insert into score(sno,cno) values('111','3-105' ...

  8. 学习总结 java Iterator迭代器练习

    package com.hanqi.jh; import java.util.*; public class Text3 { public static void main(String[] args ...

  9. js动态生成JSON树

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. jQuery Ajax 全解析(转)

    <!-- .ajax div{ border: solid 1px red; } --> // <![CDATA[ $(function(){ $("#btnajax&qu ...