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

                    }

                }

            }

        }

    }

  • 相关阅读:
    godep使用
    golang导入包的几个说明:import
    X-Frame-Options 响应头
    HTTP Strict Transport Security
    为什么我们要使用HTTP Strict Transport Security?
    IFrame安全问题解决办法(跨框架脚本(XFS)漏洞)
    基于iframe的CFS(Cross Frame Script)和Clickjacking(点击劫持)攻击
    javaWeb防止恶意登陆或防盗链的使用
    关于Cookie 的HttpOnly属性(java/web操作cookie+Tomcat操作jsessionid)
    会话cookie中缺少HttpOnly属性 解决
  • 原文地址:https://www.cnblogs.com/niaowo/p/2853524.html
Copyright © 2020-2023  润新知