zoukankan      html  css  js  c++  java
  • 多数据库事务处理:有待考究

    转:http://www.cnblogs.com/tylerdonet/archive/2009/10/30/1592653.html

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

     1 public void TransactionDebug()
     2   {
     3 
     4    string sql1 = @"Data Source=XXXXXX;Initial Catalog=stuDB;Integrated Security=True";
     5    string sql2 = @"Data Source=XXXXXX;Initial Catalog=Northwind;Integrated Security=True";
     6 
     7    SqlConnection conn1 = new SqlConnection(sql1);
     8    SqlConnection conn2 = new SqlConnection(sql2);
     9 
    10    string sqlUpdate1 = "UPDATE stuInfo SET stuAddress='江南' WHERE stuNO='s25301'";
    11    string sqlUpdate2 = "UPDATE Products SET ProductName='Chian' WHERE ProductID=1";
    12 
    13 
    14    SqlCommand sc1 = new SqlCommand(sqlUpdate1, conn1);
    15    SqlCommand sc2 = new SqlCommand(sqlUpdate2, conn2);
    16 
    17    conn1.Open();
    18    SqlTransaction sqlTran1 = conn1.BeginTransaction();
    19    conn2.Open();
    20    SqlTransaction sqlTran2 = conn2.BeginTransaction();
    21 
    22    int effectrow=0;
    23 
    24    using(TransactionScope tranScope = new TransactionScope())
    25    {
    26     try
    27     {
    28      sc1.Transaction = sqlTran1;
    29      effectrow += sc1.ExecuteNonQuery();
    30 
    31      sc2.Transaction = sqlTran2;
    32      effectrow += sc2.ExecuteNonQuery();
    33     }
    34     catch(SqlException ex)
    35     {
    36      sqlTran1.Rollback();
    37      sqlTran2.Rollback();
    38      conn1.Close();
    39      conn2.Close();
    40 
    41      throw ex;
    42     }
    43     if(effectrow == 2)
    44     {
    45      sqlTran1.Commit();
    46      sqlTran2.Commit();
    47     }
    48     else
    49     {
    50      sqlTran1.Rollback();
    51      sqlTran2.Rollback();
    52     }
    53 
    54     conn1.Close();
    55     conn2.Close();
    56    }
    57   }
  • 相关阅读:
    centos7安装rlwrap
    Linux CentOS 7的图形界面安装(GNOME、KDE等)
    在oracle下我们如何正确的执行数据库恢复
    Viewer.js 图片预览插件使用
    深拷贝和浅拷贝
    ES6 export,import报错
    Yarn 命令详解
    npm命令 VS yarn命令
    Windows下nginx作为静态资源服务器使用
    关于Vue脚手架写法的问题
  • 原文地址:https://www.cnblogs.com/Unrmk-LingXing/p/4108436.html
Copyright © 2011-2022 走看看