分布式事务TransactionScope

以下是分布式事务的所有情况的例子了,包含了事务套事务,事务套存储过程事务,经过测试,TransactionScope对于分布式事务的各种情况支持的很好。

使用分布式事务注意如下几点:

1:确保参与事务的machine开启了分布式事务支持;

2:如果machine开启了防火墙,需要设置msdtc进程为例外;

3:参与事务的machine不能跨域(如果跨域,目前微软还没有确切的解决方案);

4:多数据库时才使用分布式事务,如果是同一个数据库,最好使用SqlTransaction.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Data.SqlClient;

using System.Transactions;

namespace ConsoleApplication16

{

    class Program

    {

        static void Main(string[] args)

        {

            TestTransaction test = new TestTransaction();

            test.Test1();

            test.Test2();

            test.Test3();

            Console.ReadLine();

        }

    }

    public class TestTransaction

    {       

        public void Test1()

        {

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))

            {

                ExecuteQuery1("insert into user1 (username) values ('user1')");

                ExecuteQuery1("insert into user2 (username) values ('user2')");

                ExecuteQuery2("insert into user1 (username) values ('user1')");

                ExecuteQuery2("insert into user2 (username) values ('user2')");

                scope.Complete();

            }

        }

        public void Test2()

        {

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))

            {

                ExecuteQuery1(@"begin tran insert into user2 (username) values ('tran1') insert into user2 (username) values ('tran2') commit tran");

                ExecuteQuery2(@"begin tran insert into user2 (username) values ('tran1') insert into user2 (username) values ('tran2') commit tran");

                scope.Complete();

            }

        }

        public void Test3()

        {

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))

            {

                Test1();

                Test2();

                scope.Complete();

            }

        }

        private void ExecuteQuery1(string query)

        {

            string connectionString = "Data Source=wrf;Initial Catalog=test1;Integrated Security=True;";

            using (SqlConnection con = new SqlConnection(connectionString))

            {

                using (SqlCommand com = new SqlCommand(query, con))

                {

                    con.Open();

                    com.ExecuteNonQuery();

                }

            }

        }

        private void ExecuteQuery2(string query)

        {

            string connectionString = "Data Source=192.168.1.113;Initial Catalog=test1;Persist Security Info=True;User ID=sa;Password=123;";

            using (SqlConnection con = new SqlConnection(connectionString))

            {

                using (SqlCommand com = new SqlCommand(query, con))

                {

                    con.Open();

                    com.ExecuteNonQuery();

                }

            }

        }

    }

}

分布式事务TransactionScope的更多相关文章

  1. 分布式事务TransactionScope所导致几个坑

    记录一下,个人见解,欢迎指正 错误: 1.该伙伴事务管理器已经禁止了它对远程/网络事务的支持. (异常来自 HRESULT:0x8004D025)2.事务已被隐式或显式提交,或已终止3.此操作对该事务 ...

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

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

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

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

  4. 关于分布式事务的一个误解:使用了TransactionScope就一定会开启分布式事务吗?

    背景: 事务是数据库管理系统的一个基本概念,事务具有四个基本特点,即ACID:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...

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

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

  6. 将不确定变为确定~transactionscope何时提升为分布式事务?(sql2005数据库解决提升到MSDTC的办法)

    回到目录 对于transactionscope不了解的同学,可以看我的相关文章 第二十六回   将不确定变为确定~transactionscope何时提升为分布式事务? 第二十七回   将不确定变为确 ...

  7. ADO.NET中的TransactionScope何时需要启用MSTDC(分布式事务管理)

    我们知道在ADO.NET中可以用TransactionScope来将多个SqlConnection(多个数据库连接)执行的Sql语句放入一个事物中提交或取消,但是使用TransactionScope的 ...

  8. C#分布式事务解决方案-TransactionScope

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

  9. 使用TransactionScope做分布式事务协调

    //场景是使用在多个数据库之间的协调,.NET 2.0使用一个新的类型 TransactionScope来进行协调,这与之前的COM+协调是相对来说更加方便的 //需要引用一个新的程序集:System ...

随机推荐

  1. IsDebuggerPresent原理及其 c++实现

    在IsDebuggerPresent下断,步入得到如下代码: 75 A1 | ] | eax:std::cout 75 | ] | eax:std::cout 75 | ] | eax:std::co ...

  2. apache的server-status如何分析的技术说明

    XML/HTML代码 Apache Server Status for www.blogguy.cn Server Version: Apache/2.2.9 (Debian) PHP/5.2.6-1 ...

  3. 使用MiniProfiler调试ASP.NET web api项目性能

    本质上,集成Miniprofiler可以分解为三个问题: 怎样监测一个WebApi项目的性能. 将性能分析监测信息从后端发送到UI. 在UI显示分析监测结果. 首先安装Miniprofiler,Min ...

  4. puppeteer:官方出品的chrome浏览器自动化测试工具

    puppeteer发布应该有一段时间了,这两天正好基于该工具写了一些自动化解决方案,在这里抛砖引给大家介绍一下. 官方描述: Puppeteer is a Node library which pro ...

  5. Python之基础练习代码

    代码1: # -*- coding: utf-8 -*- def function(*numbers): sum = 0 for num in numbers: sum = sum + num*num ...

  6. SVN:This client is too old to work with working copy…解决的方法

    解决svn:This client is too old问题 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXlmbXlmbXlmbXlm/font/5a ...

  7. Super expression must either be null or a function, not undefined

    按照之前买的用JavaScript开发移动应用的例子来编写的,然后报了这个错.我的头部声明是这样的 var React = require('react-native'); var { Text, V ...

  8. 如何查看.Net Framework版本

    地址栏输入 %systemroot%\Microsoft.NET\Framework,或win+R快捷方式打开“运行”窗口,输入%systemroot%\Microsoft.NET\Framework ...

  9. netMarketing类库: 类库说明

    这个类库是作者工作中使用的私人类库,本类库适用于自动化行业的软件工程师使用.如果大家在使用中有任何疑问和建议欢迎联系作者, 或者在页面留言. (一) 引用类库 本类库的环境为.net framewor ...

  10. 当我们用自定义的类对象作为key时,我们必须在程序中覆盖HashCode()和equals()。

    Key值既然可以作为对象,那么也可以用一个自定义的类.比如: m.put(new sutdent(“Liucy”,30),”boss”) 如果没有语句来判定Student类对象是否相同,则会全部打印出 ...