在.net framework 中 System.Transactions 简化了事务的处理,最近做数据集成的项目,多次使用了事务处理,使用了System.Transactions ,下面我将把他的使用方法总结一下,希望对别人有帮助。

一。如何使用

System.Transactions 使用非常简单,下面是使用的代码

DEMO 1

代码

using System;
using System.Collections.Generic;
using System.Text;
using System.Transactions;
using System.Data.SqlClient;

namespace TestTransactions
{
    class Transactions
    {
        private void UseTransactions()
        {
            using (TransactionScope tran = new TransactionScope())
            {
                using (SqlConnection conn = new SqlConnection("server=.;database=Northwind;uid=sa;pwd=sa"))
                {
                    string strInert = "insert into table1(name,password) values('ilahsa','123456')";
                    string strUp = "update table1 set password='654321' where name = 'ilahsa'";
                    SqlCommand cmd1 = new SqlCommand(conn, strInert);
                    cmd1.ExecuteNonQuery();
                    SqlCommand cmd2 = new SqlCommand(conn, strUp);
                    cmd2.ExecuteNonQuery();
                }
                tran.Complete();
            } 
        }
    }
}

首先声明一个TransactionScope  的实例,把需要事务处理的代码放在Using的语句块,这段代码封装了连个SQL 指令,只要其中有一个执行过程中发生异常,TransactionScope 对象会自动回滚事务,代码正常执行的话, tran.Complete()语句提交了事务。DEMO1中使用了两个Using 语句,代码执行完毕会自动释放资源(比较推荐这种方式),看到了吗,使用 System.Data.SqlClient处理事务是如此的简单,只需几行代码就搞定了

二.事务的设置

 TransactionScopeOptions  描述
 Required  如果已经存在一个事务,那么这个事务范围将加入已有的事务。否则,它将创建自己的事务。
 RequiresNew  这个事务范围将创建自己的事务。
Suppress  如果处于当前活动事务范围内,那么这个事务范围既不会加入氛围事务 (ambient transaction),也不会创建自己的事务。当部分代码需要留在事务外部时,可以使用该选项。

--------------------------------------------------------------------------------

使用TransactionScopeOptions可以改变TransactionScope的默认事务类型 (默认的事务类型是Required)。

使用方法

DEMO2

代码

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                using (SqlConnection conn1 = new SqlConnection(str))
                {
                    SqlCommand cmd = new SqlCommand(conn1, strsql1);
                    cmd.ExecuteNonQuery();
                }
                using (SqlConnection conn2 = new SqlConnection(conn2))
                {
                    SqlCommand cmd = new SqlCommand(conn2, strsql2);
                    cmd.ExecuteNonQuery();
                }
                ts.Complete();
            }

三。 什么时候使用System.Transactions

第一中情况是,你的数据库支持轻型事务,何为轻型事务MSDN上有很明确的介绍,在这里就不多说了,也就是你的数据库是SQL SERVER 2005.

第二种情况是你的事务中使用了分布式的数据库系统。即在一个事务处理中使用了多个数据库。使用System.Transactions也会使性能有很大的提升。

如果数据库是SQL SERVER  2000,而又只连接一个数据库的话,使用ado.net 的事务处理更有优势。

转载于:https://www.cnblogs.com/jhxk/articles/1666099.html

使用System.Transactions相关推荐

  1. System.Transactions介绍

    在.Net Framework 2.0中,新增了一个名称空间:System.Transactions.从其名字就可以看出来,里面包含了Transaction相关的类.System.Transactio ...

  2. System.Transactions深入了解

    System.Transactions框架包含了一个称为LTM(Lightweight Transaction Manager)的TM,它隐式的将连接登记于事务中,从内部来看,是由ITransacti ...

  3. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。

    "System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 参考文章: (1)"System.Tran ...

  4. System.Transactions:实现你自己的Resource Manager

    By Sahil Malik[http://www.developer.com/net/net/article.php/11087_3565196_1] .net 2.0所带来最大的变化之一也许就是S ...

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

    在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该方法对用于创建基于现有Transaction对 象的"依赖事务(Depende ...

  6. System.Transactions事务超时设置

    System.Transactions 有2个超时属性(timeout 与 maxTimeout),可以通过配置文件来进行设置. 1. timeout System.Transactions 默认的t ...

  7. 读书笔记:《亮剑 .Net》——System.Transactions 事务处理

    使用System.Transactiions不需要考虑是简单事务还是分布式事务. 在SQL Server 2005下.Net会创建一个Local Transaction,性能非常高.但是如果是SQL ...

  8. System中不存在类型或命名空间名称Transactions

    添加引用 System.Transactions.dll 在web.config的<assemblies>节点加         <add assembly="System ...

  9. system.exception所有子类详解

    一直以来写代码抛出的异常都用的exception,从来没有像书上教的那样具体可能是啥异常就抛对应的异常,最后才说用的exception异常类抛异常.前段时间整理代码的时候突然感觉好像从来也就没有对异常 ...

最新文章

  1. 华人首位!许晨阳获2021年美国数学会代数领域最高奖
  2. Xilinx 学习笔记1---新建工程和创建源代码文件
  3. 计算机组成原理 — 异构计算
  4. SAP 取月度期初库存和月度期末库存(历史库存)
  5. javascript面试_在编码面试中需要注意的3个JavaScript问题
  6. ES6学习笔记(三)—— Set 和 Map
  7. 【今日CS 视觉论文速览】11 Dec 2018
  8. mysql三表联合更新_mysql三表连接update
  9. php order by 3-- 没反应,Thinkphp 无法使用-)order() 排序的两种解决办法!
  10. linux在哪里储存变量值,关于linux:在bash中,如何在变量中存储返回值?
  11. 深度神经网络调参经验
  12. Scratch3.0 保存缩略图
  13. 数据库学习-关于存在量词exists的理解
  14. python编写贪吃蛇大战_用Python实现贪吃蛇双人大战
  15. 2022软件测试校招笔试题-软件测试基本理论
  16. app store android退款,iPhone8手机购买的app应用怎么退款?苹果8购买的app退款方法步骤...
  17. UVA 10306 e-Coins (二维背包)
  18. [2012山东ACM省赛] Fruit Ninja II (三重积分,椭球体积)
  19. 网站性能优化之_页面静态化
  20. 2021华数杯C题总结

热门文章

  1. JZOJ 1319. 邮递员
  2. python 闭包_一篇文章读懂Python的闭包与装饰器!
  3. 基于STM32系列芯片的 IAP实现的探索
  4. aba会导致问题_护发素会导致掉发?这个纠结多年的问题,真相原来是这回事
  5. python 播放视频 ftp_利用Python快速搭建HTTPFTP服务器
  6. CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记
  7. 双眼融合训练一个月_视觉融合你知道多少
  8. python测试网站功能_Python检测网站链接是否已存在
  9. 客户端相关知识学习(三)之Android原生与H5交互的实现
  10. 使用shell进行mvn打包,根据mvn是否打包成功来进行下一步操作