• 多数据库事务处理


        看见园子里面一位高人写了一篇多数据库事务处理的东西,觉得很有意思,把它重写了一下。

    在一个数据库中实现事务是没什么问题,当时项目中常常会遇到多个数据库交叉事务的情况,这个方法使用两个SqlTransaction 来处理这两个数据库中的事务,当一个更新不成功两个都要回滚。

    public void TransactionDebug()
      {

       string sql1 = @"Data Source=XXXXXX;Initial Catalog=stuDB;Integrated Security=True";
       string sql2 = @"Data Source=XXXXXX;Initial Catalog=Northwind;Integrated Security=True";

       SqlConnection conn1 = new SqlConnection(sql1);
       SqlConnection conn2 = new SqlConnection(sql2);

       string sqlUpdate1 = "UPDATE stuInfo SET stuAddress='江南' WHERE stuNO='s25301'";
       string sqlUpdate2 = "UPDATE Products SET ProductName='Chian' WHERE ProductID=1";


       SqlCommand sc1 = new SqlCommand(sqlUpdate1, conn1);
       SqlCommand sc2 = new SqlCommand(sqlUpdate2, conn2);

       conn1.Open();
       SqlTransaction sqlTran1 = conn1.BeginTransaction();
       conn2.Open();
       SqlTransaction sqlTran2 = conn2.BeginTransaction();

       int effectrow=0;

       using(TransactionScope tranScope = new TransactionScope())
       {
        try
        {
         sc1.Transaction = sqlTran1;
         effectrow += sc1.ExecuteNonQuery();

         sc2.Transaction = sqlTran2;
         effectrow += sc2.ExecuteNonQuery();
        }
        catch(SqlException ex)
        {
         sqlTran1.Rollback();
         sqlTran2.Rollback();
         conn1.Close();
         conn2.Close();

         throw ex;
        }
        if(effectrow == 2)
        {
         sqlTran1.Commit();
         sqlTran2.Commit();
        }
        else
        {
         sqlTran1.Rollback();
         sqlTran2.Rollback();
        }

        conn1.Close();
        conn2.Close();
       }
      }

    作者:Tyler Ning
    出处:http://www.cnblogs.com/tylerdonet/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请微信联系冬天里的一把火

  • 相关阅读:
    路由的添加和删除
    extjs中的tabpanle下的combobox提交问题
    Asp.net下from认证统一认证配置
    ASP.NET权限管理系统(FrameWork) 1.0.8 Release
    Web网站架构设计
    手机6120C 玩仙剑dos版
    Extjs 4.07 对类型定义引发的匹配问题
    Supesoft权限管理系统(FrameWork) 1.0.9 Release
    Google静态地图如何显示两点之间路线1(简单路线)
    Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题
  • 原文地址:https://www.cnblogs.com/tylerdonet/p/1592653.html
Copyright © 2020-2023  润新知