这个事务该如何实现?

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

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

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

这样一定安全吗?如果银行转账完了以后,突然asp.net服务器停电,那该怎么办?
...全文
327 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
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();
}
加载更多回复(26)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧