c#使用Transactions类完成多个数据库的事务操作(分布式事务处理)
下面是用一个事务处理访问两个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类完成多个数据库的事务操作(分布式事务处理)相关推荐
- c#使用Transactions类完成多个数据库的事务操作
use [db1] go /****** 对象: Table [dbo].[t1] 脚本日期: 11/19/2007 13:52:51 ******/ SET ANSI_NULLS ON GO ...
- 使用JDBC进行数据库的事务操作(2)
本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...
- java禁止数据库写入事务_Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等......
1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction开启事务 •Rollback 回滚事务 •Commit 提 ...
- c#中数据库的事务操作
在用C#进行开发的时候,我们会经常用到数据库.有时候需要对数据库多个表进行操作,但是如果我们的命令有问题,其中有部分表的内容变更而其他表的内容却还是保持原样,这样就会导致数据库数据表的冲突,对我们业务 ...
- 分布式mysql保持数据一致性_一种分布式跨数据库保持事务一致性的方法及系统与流程...
本发明涉及计算机网络技术领域,尤其涉及一种分布式跨数据库保持事务一致性的方法及系统. 背景技术: 目前,分布式服务架构十分的流行,特别是对于电商领域来说.他的优点就不多说了,但是随着集群机器的增加,集 ...
- ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁:
ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁: void UseDataAdapter() { //1 连接数据库 //2 创建 ...
- python 用元类 type 实现对数据库的ORM 映射
python 实现对数据库的ORM 映射 如果使用pymysql 操作数据库 不借助框架的话,频繁写sql语句, 的确比较麻烦 这里借助 type 元类 对 数据表类实现了 与mysql之间的 映射 ...
- MVC - 建立模型/实体类,对应到数据库
MVC - 建立模型/实体类,对应到数据库 建的模型需要有PK主关键字,默认为'Id'或者'实体名Id',如果PK不是这两个,要先添加[Key]到PK上方. public partial class ...
- 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型
问题描述: 使用MyBatis Plus 3.2.0版本插件代码生成器生成实体类后,对于数据库中字段类型datetime的字段会转变为LocalDateTime类型,IDEA提示报错"Usa ...
最新文章
- ueditor php 附件,ueditor单独调用上传附件和图片的功能
- python语言用途-Python是万能的编程语言吗?这五大用途很重要!
- Android studio 中引用jar的其实是Maven?(一)
- php获取总共内存_php获取页面运行使用内存的两个函数
- k8s的list-watch机制和 pod调度约束
- es6-promise源码重点分析难点解析
- python 使用jinjia2 生成文件的空格处理
- .NET Core加解密实战系列之——RSA非对称加密算法
- 开红数显示服务器为空,网维大师常见问题:图标空白或红号问号
- linux网络编程socket,Linux网络编程入门
- 《使命召唤7:黑色行动》有什么简单办法进入僵尸模式
- wide and deep及其发展
- svn恢复误删文件步骤
- mac安装旺旺启动台找不到_如何正确安装卸载mac软件
- shopex PHP Notice,SHOPEX 4.8.5 最新注入漏洞后台拿SHELL
- windows php进程数,win10的进程数应该多少?
- 《C语言程序设计》单元总结与练习题
- 动态内存的开辟与释放
- elasticsearch-ingest-pipeline总结
- 遗传算法求解TSP问题(matlab实现)