c#使用Transactions类完成多个数据库的事务操作
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类完成多个数据库的事务操作相关推荐
- c#使用Transactions类完成多个数据库的事务操作(分布式事务处理)
下面是用一个事务处理访问两个DBServer的表操作.(例子) 新建一个项目 using System; using System.Data; using System.Data.SqlClient; ...
- 使用JDBC进行数据库的事务操作(2)
本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...
- 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 ...
- Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致
解决实体类属性名和数据库字段不一致 转载于:https://www.cnblogs.com/mww-NOTCOPY/p/10950712.html
最新文章
- vs-halcon-大恒相机配置
- 阿里云容器服务中国最佳,进入 Forrester 报告强劲表现者象限
- 在配置类上写@CompentScan注解来进行包扫描
- java中的Atomic类
- linux命令总结----转载
- Eight Machine Learning JavaScript Frameworks to Explore
- break VS continue
- 芋道 spring security oauth2 入门_Spring官方宣布:新的Spring OAuth2.0授权服务器已经来了
- 从浏览器输入地址到渲染出网页这个过程发生了什么?
- Bailian4143 和为给定数【排序+二分】
- Linux Sed简介
- 十二周二次课 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.
- 创业不难,找准项目才难,教你一眼识破好项目
- c语言采用牛顿迭代法求解一元三次方程,使用牛顿迭代法求根 一元三次方程的根...
- VTK笔记——医学图像等值面提取(Marching Cubes)
- .orig 等冲突文件的来源
- AMD EPYC(霄龙)Genoa服务器 | 综合评测
- Git操作不规范,战友提刀来相见。
- 十个值得珍藏的正则表达式
- 如何将钉钉集成到FineReport插件中