避免Windows应用程序C#中的并发

时间:2013-11-18 17:07:56

标签: c# winforms concurrency

我为一家药房公司开发了一个Windows应用程序。所以每个用户都可以安装设置并使用该应用程序。现在有一个Purchase模块,用户输入的InvoiceNumber应该是唯一的。输入InvoiceNumber(并保留文本) -box)我有一个验证来检查InvoiceNumber是否已经存在。这很好。现在问题是如果两个用户在不同的系统中输入相同的InvoiceNumber并且当他们同时点击Save按钮时,它将是比如插入两个具有相同InvoiceNumber的记录。这是2-3个模块中的问题,我可以注意到上述情况。

任何人都可以建议避免上述情况。

根据以下注释如果我在InvoiceNumber列上创建Unique Constraint,那么它应该是唯一的。在我的应用程序中,用户可以删除创建的发票并再次输入这些详细信息。在那种情况下我只是更新数据库中的IsDeleted列这种约束不起作用。

Prathap

1 个答案:

答案 0 :(得分:1)

对于您的更新,最简单的解决方案是使用约束DeletedGuid添加类型为uniqueidentifier的新列NOT NULL,并将其默认为零GUID。

当您设置IsDeleted = 1时,您也会DeletedGuid = NewId()。然后,您可以对InvoiceNumber, DeletedGuid而不仅仅是InvoiceNumber设置唯一约束,这样做的唯一方法是重复InvoiceNumber,如果一个或两个值在DeletedGuid中有一个随机GUID {1}}列(如果您可以“取消删除”发票,请务必将GUID归零)。