多数据库事务处理

简介: 看见园子里面一位高人写了一篇多数据库事务处理的东西,觉得很有意思,把它重写了一下。 在一个数据库中实现事务是没什么问题,当时项目中常常会遇到多个数据库交叉事务的情况,这个方法使用两个SqlTransaction 来处理这两个数据库中的事务,当一个更新不成功两个都要回滚。

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

在一个数据库中实现事务是没什么问题,当时项目中常常会遇到多个数据库交叉事务的情况,这个方法使用两个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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
ly~
|
2月前
|
数据库 数据库管理
数据库的事务处理机制有哪些优点?
数据库的事务处理机制具备多种优势:首先,它能确保数据一致性,通过原子性保证所有操作全成功或全失败,利用完整性约束维护数据的有效性;其次,增强了系统可靠性,提供故障恢复能力和正确处理并发操作的功能;最后,简化了应用程序开发工作,将操作封装为逻辑单元并集中处理错误,降低了开发复杂度。
ly~
48 1
|
4月前
|
SQL 数据处理 数据库
SQL进阶之路:深入解析数据更新与删除技巧——掌握批量操作、条件筛选、子查询和事务处理,提升数据库维护效率与准确性
【8月更文挑战第31天】在数据库管理和应用开发中,数据的更新和删除至关重要,直接影响数据准确性、一致性和性能。本文通过具体案例,深入解析SQL中的高级更新(UPDATE)和删除(DELETE)技巧,包括批量更新、基于条件的删除以及使用子查询和事务处理复杂场景等,帮助读者提升数据处理能力。掌握这些技巧能够有效提高数据库性能并确保数据一致性。
97 0
|
7月前
|
存储 缓存 关系型数据库
在线事务处理数据库存储引擎的技术创新
在线事务处理数据库存储引擎的技术创新 在现代数据库系统中,事务处理性能和存储空间效率一直是关键的挑战。为了应对这些挑战,一种名为X-Engine的存储引擎应运而生,它利用FPGA硬件加速Compaction过程,使得系统上限进一步提升。这一技术属首次将硬件加速技术应用到在线事务处理数据库存储引擎中,相关论文已经被2020年的FAST'20国际会议接收。
61 1
|
XML Java Go
Spring事务管理: 构建稳健的数据库事务处理
Spring事务管理: 构建稳健的数据库事务处理
65 0
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
143 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
Oracle NoSQL Java
SpringBoot | 1.4 数据库事务处理
前面讲解了Sring的AOP,可以知道它是用来抽取公共代码,增强方法的。而在JDBC操作数据库进行数据处理时,有很多重复的公共代码;事务的提交与回滚跟AOP的约定流程很相似。因此,Spring数据库事务编程的思想基于AOP的设计思想,数据库事务处理是AOP的一种典型应用。 注:在说明注解时,第一点加粗为注解中文含义,第二点为一般加在哪身上,缩进或代码块为示例,如: **@注解** - **中文含义** - 加在哪 - 其他…… - `语句示例` ```java //代码示例 ```
649 0
SpringBoot | 1.4 数据库事务处理
|
存储 SQL 前端开发
【DBMS 数据库管理系统】OLTP 联机事务处理 与 OLAP 联机分析处理 ( 数据仓库 与 OLAP | OLAP 联机分析处理 | OLTP 与 OLAP 区别 )
【DBMS 数据库管理系统】OLTP 联机事务处理 与 OLAP 联机分析处理 ( 数据仓库 与 OLAP | OLAP 联机分析处理 | OLTP 与 OLAP 区别 )
626 0