博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
System.Transaction (TransactionScope) 与 可提升 (Promotable) 交易
阅读量:4316 次
发布时间:2019-06-06

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

这是我的备份,原文请看 

 

书本下集,有一章提及数据库交易与ADO.NET的用法

最简单的就是使用 System.Transaction命名空间里面的「TransactionScope来做

 

提醒您:

    请先动手「加入参考」,才能呼叫 System.Transaction这个命名空间!

 

微软MSDN上面有篇文章,我看了还是不懂

套用我的方法,做中学

直接看程序代码

做了以后再来看文字讨论(抽象概念)

 

果然一次就搞懂了

................................................................................................................................................

 

 

数据源:

 

以下范例示范如何针对由两个不同的 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

 

转载于:https://www.cnblogs.com/mis2000lab/p/4095741.html

你可能感兴趣的文章
centos中安装tomcat6
查看>>
从Vue.js窥探前端行业
查看>>
学习进度
查看>>
poj3368 RMQ
查看>>
“此人不存在”
查看>>
github.com加速节点
查看>>
解密zend-PHP凤凰源码程序
查看>>
python3 序列分片记录
查看>>
Atitit.git的存储结构and 追踪
查看>>
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
Part 2 - Fundamentals(4-10)
查看>>
使用Postmark测试后端存储性能
查看>>
NSTextView 文字链接的定制化
查看>>
第五天站立会议内容
查看>>
CentOs7安装rabbitmq
查看>>
(转))iOS App上架AppStore 会遇到的坑
查看>>
解决vmware与主机无法连通的问题
查看>>
做好产品
查看>>