我遇到了一个问题,我不知道如何解决这个问题,我想知道为了完成这个任务,我应该考虑的最佳方法是什么。
我们正在开发一个应用程序VB.net 2.0和SQL 2005。允许用户根据可能包含许多接收到的商品的购买取消接收。但是,在取消的过程中,一些问题会被问到用户,比如“你想取消好的#1吗?”如果是,请删除。然后,“你想取消好的#2",不,不要删除和另一个问题(如果收到的项目是发出的,一个进程必须由用户手工制作)。最后,如果所有的货物都被成功地取消了,我们必须取消接收本身。但有时,如果在此过程中向用户请求错误或出现某些条件,我们希望取消从一开始所做的任何操作,并使其返回到他的原始状态。所以我想到了Transaction。
已禁用分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具在MSDTC的安全配置中启用用于网络访问的DTC。
我试过这里描述的东西,在另一堆柱子上,它工作得很好.直到用户重新存储他们的电脑。每次用户重新启动计算机时,他们都必须返回值。此外,默认情况下,没有计算机将此值设置为On。至少在10个计算机基础上,没有一个被激活。这个程序安装在大约300台电脑上,所以这两者都不是什么好东西。
所以有人知道我怎么能做到这一点吗?还有什么可以通过代码进行事务处理,我可以使用吗?
NOTE1:我知道有人会说,首先向用户询问条件并在内存中维护值。一旦完成,如果一切顺利,就使用delete。但是,如果在删除商品#4时发生了错误呢?我怎样才能给一个商店程序一个动态清单的货物要删除?
NOTE2:对不起我的英语,我通常会说法语。
NOTE3:如我所知,VB和C#都可以提供C#中的任何示例。
发布于 2012-05-04 17:45:50
假设您已经有类似的存储过程来管理取消:
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#中,它看起来像:
canceledGoods.Add (string.Format("exec dbo.CancelGood {0}", goodID));如果canceledGoods中至少有一个字符串,则生成并执行批处理:
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);https://stackoverflow.com/questions/10453169
复制相似问题