在程序的开发过程中,对数据库的增删改通常要用到事务,用来实现的全部更新和全部回滚。单数据库还比较好做,如果遇到同时操作多个数据库增删改,可以用下面的方法
一。TransactionScope
类
TransactionScope
类是framework2.0 新增的一个类,在System.Transactions命名空间中,使用时必须先添加System.Transactions
引用;另外还要在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动,启动这个服务.示例代码如下:
Code
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;
}
二。另一种方法就是建立两个事务,两个连接了。代码如下;
Code
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;
}
分享到:
相关推荐
6、在成批处理重复的插入或更新操作中使用PreparedStatement对象 如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有...
在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...
整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应用产生的具体不同 的变化需求,而这些变化东西就是 J2EE 程序员所要做的。 由此可见,设计模式和 J2EE 在思想...
【疑问】 如果您在使用过程中遇到问题,请访问http://www.72b.net 您可以在“网站事务”->“产品服务”中留言。 该系统用到Cookies,请不要屏蔽。如打开时出现多个导航条,请首先查看您是否禁用...
(39) 在关系数据库中,用来表示实体之间联系的是(D) A. 树结构 B. 网结构 C. 线性表 D. 二维表 (40) 将E-R图转换到关系模式时,实体与联系都可以表示成(B) A. 属性 B. 关系 C. 键 D. 域 (41) 在下列选项中,哪个不是...
Browser指的是Web浏览器,与C/S架构相比,B/S模式极少数事务逻辑在前端实现,它的主要事务逻辑在服务器端实现。B/S架构的系统无须特别安装,只有Web浏览器即可。 ———————————————— 版权声明:本文为...
在这种结构下,用户界面通过客户端和服务 器端实现,一部分事务逻辑在客户端端实现,但是主要事务逻辑在服务 器端实现。用客户端和服务器端实现短信发送强大功能,并是过程更加 安全方便。这种结构已成为当今应短信...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
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 ...
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 ...
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 ...
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 ...