下面是用一个事务处理访问两个DBServer的表操作。(例子)

新建一个项目

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Configuration;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Transactions;

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection s1 = new SqlConnection(WebConfigurationManager.ConnectionStrings["sqlconnstring_t1"].ConnectionString);
        SqlConnection s2 = new SqlConnection(WebConfigurationManager.ConnectionStrings["sqlconnstring_t2"].ConnectionString);

string queryString1 = string.Empty;
        string queryString2 = string.Empty;
        queryString1 = string.Format(" insert into t1(name,pwd,email) values('{0}','{1}','{2}') ",this.TextBox1.Text,this.TextBox2.Text,this.TextBox3.Text);
        queryString2 = string.Format(" insert into t2(name,state) values('{0}','{1}') ",this.TextBox4.Text,this.TextBox5.Text);
       
        SqlCommand sc1 = new SqlCommand(queryString1,s1);       
        SqlCommand sc2 = new SqlCommand(queryString2, s2);

s1.Open();
        SqlTransaction sqlTran1 = s1.BeginTransaction();
        s2.Open();
        SqlTransaction sqlTran2 = s2.BeginTransaction();

using (TransactionScope transScope = new TransactionScope())
        {
            try
            {
                sc1.Transaction = sqlTran1;
                sc1.ExecuteScalar();

sc2.Transaction = sqlTran2;
                sc2.ExecuteScalar();
            }
            catch(SqlException ex)
            {
                sqlTran1.Rollback();
                sqlTran2.Rollback();
                s1.Close();//如果不增加数据库事务,连接关闭时,数据会写入数据库
                s2.Close();
                return;
            }
            sqlTran1.Commit();
            sqlTran2.Commit();   
            transScope.Complete();
            s1.Close();
            s2.Close();
        }
    }

}

建DBServer脚本:

use [db1]

go
/****** 对象:  Table [dbo].[t1]    脚本日期: 11/19/2007 13:52:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t1](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
 [pwd] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
 [email] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

use [db2]
GO
/****** 对象:  Table [dbo].[t2]    脚本日期: 11/19/2007 13:51:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t2](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
 [state] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

web.config 配置

<connectionStrings>
  <add name="sqlconnstring_t1" connectionString="server=192.168.1.1;database=db1;uid=sa;password=sa;"/>
  <add name="sqlconnstring_t2" connectionString="server=192.168.1.1;database=db2;uid=sa;password=sa;"/>
 </connectionStrings>

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lmjlss/archive/2011/02/17/6190811.aspx

转载于:https://www.cnblogs.com/aaa6818162/archive/2011/04/16/2018289.html

c#使用Transactions类完成多个数据库的事务操作(分布式事务处理)相关推荐

  1. c#使用Transactions类完成多个数据库的事务操作

    use [db1] go /****** 对象:  Table [dbo].[t1]    脚本日期: 11/19/2007 13:52:51 ******/ SET ANSI_NULLS ON GO ...

  2. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

  3. java禁止数据库写入事务_Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等......

    1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction开启事务 •Rollback 回滚事务 •Commit 提 ...

  4. c#中数据库的事务操作

    在用C#进行开发的时候,我们会经常用到数据库.有时候需要对数据库多个表进行操作,但是如果我们的命令有问题,其中有部分表的内容变更而其他表的内容却还是保持原样,这样就会导致数据库数据表的冲突,对我们业务 ...

  5. 分布式mysql保持数据一致性_一种分布式跨数据库保持事务一致性的方法及系统与流程...

    本发明涉及计算机网络技术领域,尤其涉及一种分布式跨数据库保持事务一致性的方法及系统. 背景技术: 目前,分布式服务架构十分的流行,特别是对于电商领域来说.他的优点就不多说了,但是随着集群机器的增加,集 ...

  6. ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁:

    ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁: void UseDataAdapter() { //1 连接数据库 //2 创建 ...

  7. python 用元类 type 实现对数据库的ORM 映射

    python 实现对数据库的ORM 映射 如果使用pymysql 操作数据库 不借助框架的话,频繁写sql语句, 的确比较麻烦 这里借助 type 元类 对 数据表类实现了 与mysql之间的 映射 ...

  8. MVC - 建立模型/实体类,对应到数据库

    MVC - 建立模型/实体类,对应到数据库 建的模型需要有PK主关键字,默认为'Id'或者'实体名Id',如果PK不是这两个,要先添加[Key]到PK上方. public partial class ...

  9. 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型

    问题描述: 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型,IDEA提示报错"Usa ...

最新文章

  1. ueditor php 附件,ueditor单独调用上传附件和图片的功能
  2. python语言用途-Python是万能的编程语言吗?这五大用途很重要!
  3. Android studio 中引用jar的其实是Maven?(一)
  4. php获取总共内存_php获取页面运行使用内存的两个函数
  5. k8s的list-watch机制和 pod调度约束
  6. es6-promise源码重点分析难点解析
  7. python 使用jinjia2 生成文件的空格处理
  8. .NET Core加解密实战系列之——RSA非对称加密算法
  9. 开红数显示服务器为空,网维大师常见问题:图标空白或红号问号
  10. linux网络编程socket,Linux网络编程入门
  11. 《使命召唤7:黑色行动》有什么简单办法进入僵尸模式
  12. wide and deep及其发展
  13. svn恢复误删文件步骤
  14. mac安装旺旺启动台找不到_如何正确安装卸载mac软件
  15. shopex PHP Notice,SHOPEX 4.8.5 最新注入漏洞后台拿SHELL
  16. windows php进程数,win10的进程数应该多少?
  17. 《C语言程序设计》单元总结与练习题
  18. 动态内存的开辟与释放
  19. elasticsearch-ingest-pipeline总结
  20. 遗传算法求解TSP问题(matlab实现)

热门文章

  1. win11没有hyper-v
  2. 用SpringMVC参数传递时,解决get请求时中文乱码的问题
  3. Sitemesh3使用及配置
  4. python安装csv出错_python处理csv文件问题解决贴
  5. jquery淡入淡出效果及突出显示案例
  6. 江苏省级计算机一级b理论,江苏省计算机一级B理论部分复习资料.doc
  7. python版本差异_npm install报错,不知道是系统差异还是node版本差异,跟python有关系?...
  8. java--类型擦除
  9. Java核心技术笔记 1
  10. 硬币支付问题(贪心策略)