首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码内部事务

代码内部事务
EN

Stack Overflow用户
提问于 2012-05-04 17:04:58
回答 1查看 198关注 0票数 3

我遇到了一个问题,我不知道如何解决这个问题,我想知道为了完成这个任务,我应该考虑的最佳方法是什么。

我们正在开发一个应用程序VB.net 2.0和SQL 2005。允许用户根据可能包含许多接收到的商品的购买取消接收。但是,在取消的过程中,一些问题会被问到用户,比如“你想取消好的#1吗?”如果是,请删除。然后,“你想取消好的#2",不,不要删除和另一个问题(如果收到的项目是发出的,一个进程必须由用户手工制作)。最后,如果所有的货物都被成功地取消了,我们必须取消接收本身。但有时,如果在此过程中向用户请求错误或出现某些条件,我们希望取消从一开始所做的任何操作,并使其返回到他的原始状态。所以我想到了Transaction

  1. 我知道有SQL事务可以使用,我也很清楚如何使用它,但我不能实际使用它,因为用户必须执行可能取消此事务的操作。
  2. 我还记得来自.NET 2.X的.NET,它可以实现类似的功能,我也知道如何使用它。问题在于TransactionScope和MSDTC。使用此方法时,我们仍然会得到一个错误,即:

已禁用分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具在MSDTC的安全配置中启用用于网络访问的DTC。

我试过这里描述的东西,在另一堆柱子上,它工作得很好.直到用户重新存储他们的电脑。每次用户重新启动计算机时,他们都必须返回值。此外,默认情况下,没有计算机将此值设置为On。至少在10个计算机基础上,没有一个被激活。这个程序安装在大约300台电脑上,所以这两者都不是什么好东西。

所以有人知道我怎么能做到这一点吗?还有什么可以通过代码进行事务处理,我可以使用吗?

NOTE1:我知道有人会说,首先向用户询问条件并在内存中维护值。一旦完成,如果一切顺利,就使用delete。但是,如果在删除商品#4时发生了错误呢?我怎样才能给一个商店程序一个动态清单的货物要删除?

NOTE2:对不起我的英语,我通常会说法语。

NOTE3:如我所知,VB和C#都可以提供C#中的任何示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-04 17:45:50

假设您已经有类似的存储过程来管理取消:

代码语言:javascript
运行
复制
create proc CancelGood (@goodID int)
as
   SET NOCOUNT ON
   SET XACT_ABORT ON

   begin transaction

   update table1 set canceled = 1
    where GoodID = @GoodID

   update table2 set on_stock = on_stock + 1
    where GoodID = @GoodID

   commit transaction

如果用户选择'Oui‘,VB代码会向某些canceledGoods列表中添加一个字符串。我不太熟悉VB.Net;在c#中,它看起来像:

代码语言:javascript
运行
复制
canceledGoods.Add (string.Format("exec dbo.CancelGood {0}", goodID));

如果canceledGoods中至少有一个字符串,则生成并执行批处理:

代码语言:javascript
运行
复制
batch = "BEGIN TRANSACTION" +
        " BEGIN TRY " +
        string.Join (Environment.NewLine, canceledGoods.ToArray()) + 
        " END TRY" +
        " BEGIN CATCH " +
        " -- CODE TO CALL IF THERE WAS AN ERROR" +
        "    ROLLBACK TRANSACTION" +
        "    RETURN" +
        " END CATCH" +
        " -- CODE TO CALL AFTER SUCCESSFULL CANCELATION OF ALL GOODS" +
        " COMMIT TRANSACTION"

conn.ExecuteNonQuery (batch);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10453169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档