• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

这个事务该如何实现?

youyi9 2004-11-03 03:11:04
假定一个电子商务网站,如果从银行转账。
try
{

银行转账;
卖出货物;
}
catch
{

}
finally
{
货款还给银行
卖出货物进入库存;
}

这样一定安全吗?如果银行转账完了以后,突然asp.net服务器停电,那该怎么办?
...全文
272 点赞 收藏 46
写回复
46 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
youyi9 2004-11-14
谢谢 Night_Elf(风暴虫) 的,其实我只是在看书的时候提出的一个问题,还是书上没有好的解决方法,所以请教大家了。不过分布式事务,好像对web服务器有特殊的要求,另外,如果要用到银行转账,需要银行的web服务,是不是也是一样操作的?
另外,我对于其他几个人提出的方法,不大理解。好像不大可行。
回复
Night_Elf 2004-11-12
还没解决呀!都给出了好几种方法呢!
回复
youyi9 2004-11-12
自己顶,
回复
xiaoslong 2004-11-11
帮你顶
回复
youyi9 2004-11-11
自己顶一下
回复
mazekui 2004-11-09
直接写个存储过程最好了
然后用上set XACT_ABORT on就没有问题了!

create proc 名字

as
set XACT_ABORT on
begin tran
转帐
给东西
commit tran
回复
youyi9 2004-11-09
mazekui(悠悠春竹)
难道一个存储过程可以作用于两个不同的数据库?
回复
youyi9 2004-11-09
谢谢Night_Elf(风暴虫)
你这个做法,对web服务器有没有特殊的要求?

wangrenda(浪人)
你能不能给一个例子?
回复
youyi9 2004-11-08
Night_Elf(风暴虫)
可以这样:
Try
银行转账;
卖出货物;
’向多数据库中写入数据
ContextUtil.SetComplete()’提交事务
Catch ex As Exception
ContextUtil.SetAbort()’事务回滚
End Try
这样行吗?
他能把银行转账,卖出货物合并成一个事务吗?
回复
youyi9 2004-11-08
wangrenda(浪人)
不明白你的意思,能不能举个例子?
回复
wangrenda 2004-11-08
我不是说了吗可以吧事务当作参数传递,
你下载个
Microsoft Application Blocks for .NET
那里就有这种方法
数据层用它也不错
回复
Night_Elf 2004-11-08
参见:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconVotingInAutomaticTransaction.asp
回复
Night_Elf 2004-11-08
可以,ContextUtil 是用于获取 COM+ 上下文信息的。在事务体内有任何错误(即使不是数据库提交的错误),它都会回滚!你可以提交一些不能提交的数据来试验一下不就知道了!
回复
beckham1122 2004-11-06
对,这种情况肯定要用到事务了啊。。。楼上的兄弟们已经说的很清楚了
回复
Night_Elf 2004-11-06
可以这样:
Try
银行转账;
卖出货物;
’向多数据库中写入数据
ContextUtil.SetComplete()’提交事务
Catch ex As Exception
ContextUtil.SetAbort()’事务回滚
End Try

当然要引用命名空间Imports System.EnterpriseServices

回复
Night_Elf 2004-11-06
对多数据库提交,建议采用Com+分布式事务,我以前也遇到过这样的问题。找下代码,稍后给你!
回复
precipitant 2004-11-06
我都是这样用:
try
{
开始一个事物,干活
}
catch
{
回滚
设置一个标志位
}
finally
{
如果标志位为错误显示:提示错误
如果不是错误显示:提交事物
释放资源
}
回复
zonglg 2004-11-06
不知道。
回复
wangrenda 2004-11-06
把事务当作参数传递给你那个两个方法
回复
smallfools 2004-11-06
楼主完全错了。

try
{
//数据库操作命令
}
catch (Exception e)
{
//如果有异常发生,这部分语句将被执行
}
finally
{
//无论是否有异常发生,这部分语句都会得到执行
}

事务处理是这样的:
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();

SqlTransaction myTrans = myConnection.BeginTransaction(); //使用New新生成一个事务
SqlCommand myCommand = new SqlCommand();
myCommand.Transaction = myTrans;

try
{
myCommand.CommandText = "Update Address set location='23 rain street' where userid='0001'";
myCommand.ExecuteNonQuery();
myTrans.Commit(); //提交事务
}
catch(Exception e)
{
myTrans.Rollback(); //回滚一个事务
}
finally
{
myConnection.Close();
}
回复
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-11-03 03:11
社区公告
暂无公告