zoukankan      html  css  js  c++  java
  • 分布式事务TransactionScope

    连接地址:http://aivii.blog.163.com/blog/static/365225662011229113332158/ 

    分布式事务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();

                    }

                }

            }

        }

    }

  • 相关阅读:
    Java实现图片裁剪预览功能
    数据结构——用C语言描述 第2版 课后答案 耿国华 版 实习题课后答案 高等教育出版社 课后习题答案 第3章 答案与解析
    对J2EE应用系统分层设计的思考
    Java实现Windows的dir命令
    Java与模式:适配器模式
    修改LigerUI的导航栏,改为Tab标签模式
    图解AngularJS Wijmo5和LightSwitch
    Sencha Cmd中脚本压缩方法之比较
    实变函数与泛函分析基础 第四版 答案 程其襄、张奠宙、胡善文、薛以锋 版 课后答案 高等教育出版社 习题答案 第一章 课后习题答案
    用edtftpj实现Java FTP客户端工具
  • 原文地址:https://www.cnblogs.com/niaowo/p/2853524.html
Copyright © 2011-2022 走看看