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>

新建一个asp.net项目。增加对system.Transactions的引用。

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();
        }
    }

}

本机为windows2003,数据库为192.168.1.1,os为windwos2003,sql server 2005

转载于:https://www.cnblogs.com/worfdream/articles/2440849.html

c#使用Transactions类完成多个数据库的事务操作相关推荐

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

    下面是用一个事务处理访问两个DBServer的表操作.(例子) 新建一个项目 using System; using System.Data; using System.Data.SqlClient; ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致

    解决实体类属性名和数据库字段不一致 转载于:https://www.cnblogs.com/mww-NOTCOPY/p/10950712.html

最新文章

  1. vs-halcon-大恒相机配置
  2. 阿里云容器服务中国最佳,进入 Forrester 报告强劲表现者象限
  3. 在配置类上写@CompentScan注解来进行包扫描
  4. java中的Atomic类
  5. linux命令总结----转载
  6. Eight Machine Learning JavaScript Frameworks to Explore
  7. break VS continue
  8. 芋道 spring security oauth2 入门_Spring官方宣布:新的Spring OAuth2.0授权服务器已经来了
  9. 从浏览器输入地址到渲染出网页这个过程发生了什么?
  10. Bailian4143 和为给定数【排序+二分】
  11. Linux Sed简介
  12. 十二周二次课 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.
  13. 创业不难,找准项目才难,教你一眼识破好项目
  14. c语言采用牛顿迭代法求解一元三次方程,使用牛顿迭代法求根 一元三次方程的根...
  15. VTK笔记——医学图像等值面提取(Marching Cubes)
  16. .orig 等冲突文件的来源
  17. AMD EPYC(霄龙)Genoa服务器 | 综合评测
  18. Git操作不规范,战友提刀来相见。
  19. 十个值得珍藏的正则表达式
  20. 如何将钉钉集成到FineReport插件中

热门文章

  1. 问题 L: 求一元二次方程的根
  2. python机器学习:线性回归_房价和房屋尺寸关系的线性拟合
  3. 数据的实操与测试|附代码(全了)
  4. linux 安装 wkhtmltox
  5. S1304第一本书内测测试分析
  6. iOS12+Xcode 10 Error: Multiple commands producei
  7. 20155307 《Java程序设计》课堂实践项目数据库
  8. Cordova安装与配置过程中出现的问题及解决办法
  9. emacs在windows下打开报错原因
  10. SpringMVC 入门示例讲解