`
tudusi
  • 浏览: 1051572 次
文章分类
社区版块
存档分类
最新评论

[转载]在不同的用户或数据库中使用事务

 
阅读更多

C#中跨数据库增删改的事务控制

在程序的开发过程中,对数据库的增删改通常要用到事务,用来实现的全部更新和全部回滚。单数据库还比较好做,如果遇到同时操作多个数据库增删改,可以用下面的方法

一。TransactionScope

TransactionScope 类是framework2.0 新增的一个类,在System.Transactions命名空间中,使用时必须先添加System.Transactions 引用;另外还要在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动,启动这个服务.示例代码如下:


try
{
using (TransactionScopescope = new TransactionScope())
{
// 更新northwind数据库的Employees表
using (SqlConnectionconOne = new SqlConnection( " server=.;uid=sa;pwd=123;database=northwind " ))
{
conOne.Open();

SqlCommandcommand
= new SqlCommand( " updateEmployeessetlastname='chen'whereemployeeid='1' " ,conOne);
int i = command.ExecuteNonQuery();
}

// 更新pubs数据库的jobs表
using (SqlConnectionconTwo = new SqlConnection( " server=.;uid=sa;pwd=123;database=pubs " ))
{
conTwo.Open();
SqlCommandcommand
= new SqlCommand( " updatejobssetjob_desc='chen'wherejob_id='1' " ,conTwo);
int i = command.ExecuteNonQuery();
}

scope.Complete();
// 提交事物
}
}
catch (Exceptionex) // 发生异常后自动回滚
{

// throw;
}

二。另一种方法就是建立两个事务,两个连接了。代码如下;


SqlConnectionconNorthwind = new SqlConnection( " server=.;uid=sa;pwd=123;database=northwind " );
SqlConnectionconPubs
= new SqlConnection( " server=.;uid=sa;pwd=123;database=pubs " );

SqlCommandcommandNorthwind
= new SqlCommand();
SqlCommandcommandPubs
= new SqlCommand();
try
{
conNorthwind.Open();
conPubs.Open();

// 更新northwind数据库的Employees表
SqlTransactiontranNorthwind = conNorthwind.BeginTransaction();
commandNorthwind.Connection
= conNorthwind;
commandNorthwind.Transaction
= tranNorthwind;
commandNorthwind.CommandText
= " updateEmployeessetlastname='chen'whereemployeeid='1' " ;
int i = commandNorthwind.ExecuteNonQuery();

// 更新pubs数据库的jobs表
SqlTransactiontranPubs = conPubs.BeginTransaction();
commandPubs.Connection
= conPubs;
commandPubs.Transaction
= tranPubs;
commandPubs.CommandText
= " updatejobssetjob_desc='chen'wherejob_id='1' " ;
int k = commandPubs.ExecuteNonQuery();

// thrownewException();

// 提交事务
commandNorthwind.Transaction.Commit();
conNorthwind.Close();

commandPubs.Transaction.Commit();
conPubs.Close();
}
catch (Exceptionex)
{

// 回滚事务
if (commandNorthwind.Transaction != null && conNorthwind != null )
{
commandNorthwind.Transaction.Rollback();
conNorthwind.Close();
}

if (commandPubs.Transaction != null && conPubs != null )
{
commandPubs.Transaction.Rollback();
conPubs.Close();
}
// throw;
}
分享到:
评论

相关推荐

    jdbc连接数据库的方式2

     6、在成批处理重复的插入或更新操作中使用PreparedStatement对象  如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有...

    asp.net知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

    二十三种设计模式【PDF版】

    整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应用产生的具体不同 的变化需求,而这些变化东西就是 J2EE 程序员所要做的。 由此可见,设计模式和 J2EE 在思想...

    Fancy v2003 测试版(72B整站程序)

    【疑问】 如果您在使用过程中遇到问题,请访问http://www.72b.net 您可以在“网站事务”->“产品服务”中留言。 该系统用到Cookies,请不要屏蔽。如打开时出现多个导航条,请首先查看您是否禁用...

    计算机二级C语言考试题预测

    (39) 在关系数据库中,用来表示实体之间联系的是(D) A. 树结构 B. 网结构 C. 线性表 D. 二维表 (40) 将E-R图转换到关系模式时,实体与联系都可以表示成(B) A. 属性 B. 关系 C. 键 D. 域 (41) 在下列选项中,哪个不是...

    家具购物系统,可用于期末作业或者毕设参考学习 系统定制请联系博主

    Browser指的是Web浏览器,与C/S架构相比,B/S模式极少数事务逻辑在前端实现,它的主要事务逻辑在服务器端实现。B/S架构的系统无须特别安装,只有Web浏览器即可。 ———————————————— 版权声明:本文为...

    短信平台设计方案.pdf

    在这种结构下,用户界面通过客户端和服务 器端实现,一部分事务逻辑在客户端端实现,但是主要事务逻辑在服务 器端实现。用客户端和服务器端实现短信发送强大功能,并是过程更加 安全方便。这种结构已成为当今应短信...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

Global site tag (gtag.js) - Google Analytics