请教,.net中的事务
今天在博客园(http://www.cnblogs.com)看到一篇文章,讲的是分布式事务的问题。问题描述如下:系统的数据库有两个,一个是SQL Server,一个是Oracle。往这两个数据库里的一张表里Insert一条记录,要保证这两个Insert在一个事务里。有人提出了如下代码:
try
{
..
sqlCommand.ExecuteNonQuery()
..
OracleCommand.ExecuteNonQuery()
sqlTrans.Commit();
oracleTrans.Commit(); //两个事务提交
}catch
{
sqlTrans.Roolback();
oracleTrans.Roolback(); //两个事务回滚
}final
{
sqlTrans.Close();
oracleTrans.Close();
}
但如果sqlTrans.Commit()后,oracleTrans.Commit()发生异常了,事务的效果还是没有达到。
听同事讲,在JAVA中容器可以处理这种事务。那在.net中如果出现这种情况,如何解决呢?讨论即给分。
问题点数:100、回复次数:10Top
1 楼saucer(思归)回复于 2005-04-01 22:33:27 得分 30
no, you should be using ServicedComponent or ServiceDomain class, see the reference articles in my blog
http://blog.joycode.com/saucer/archive/2005/01/05/42381.aspxTop
2 楼zhongwanli(㊣【为了老婆,二次重构____然后升★★】㊣)回复于 2005-04-04 14:17:49 得分 5
SeeingTop
3 楼phinuxmao()回复于 2005-04-08 17:10:55 得分 10
用COM+的事物控制功能Top
4 楼qqqdong()回复于 2005-04-08 23:35:50 得分 20
[WebMethod(TransactionOption=TransactionOption.Required)]
public ReturnCode SeatModifyTicketPath(......)
{
try
{
ContextUtil.EnableCommit();
.....
ContextUtil.SetComplete();
return ReturnCode.OK;
}
catch ( Exception error )
{
ContextUtil.SetAbort();
return AppException.Process(error);
}
finally
{
if ( o != null ) o.Dispose();
}
}Top
5 楼naturalth(自我批判,是思想、品德、素质、技能创新的优良工具)回复于 2005-04-09 11:33:26 得分 5
建议你看看这个:http://www.uml.org.cn/opensource/websharp/Document/WebsharpAOP.htm
我也是刚刚学AOPTop
6 楼volcano3035112(火山)回复于 2005-04-12 08:15:42 得分 10
在.net中使用自动事务管理 ,可以跨越ADO.NET的连接事务,在一个方法级内实现事务管理。
你可以参考MSDN中关于自动事务的内容。Top
7 楼kuzhuxuan()回复于 2005-04-22 14:58:36 得分 5
如volcano3035112(火山) 所说,.net本身具有事务管理,但应相对而言,较为浪费资源。Top
8 楼brando_beat(Eの懒龙)回复于 2005-04-23 15:29:31 得分 5
upTop
9 楼tingpig(汀)回复于 2005-04-25 17:45:42 得分 10
把事务封装在com+中,用ServicedComponent类Top
10 楼o2delphi(花满楼)回复于 2005-05-03 21:58:31 得分 0
看来在.net中,跨数据库的事务用COM+还是正道。Top




