2012-01-23 46 views
1

我已经做了一些搜索,但还没有找到确切的答案,我觉得必须是常见的情况,并且应该有一个“最佳实践”模式解决方案:在SQL Server 2008中只允许一个客户更新

我有一个用.NET 4(C#)和SQL SERVER 2008后端编写的应用程序。我拥有完全的控制权,并且不需要担心外部流程或应用程序。

从本质上讲,我要做到以下几点:

允许任何人看到客户和他们的订单(从主搜索表单返回)。

只要用户添加新订单或选择订单查看或编辑,就会在整个客户上锁定一个锁。其他用户将能够“只读”客户和任何订单。

当用户退出订单时,锁定被移除(通过退出屏幕或退出应用程序)。而且,这可能是最困难的部分,如果用户崩溃(可能锁只有有限的时间来确保这一点),锁就会被移除。

我看到了应用程序锁和事务,但我不知道要使用哪个,它们每个都似乎有问题。

那么锁定客户的最佳做法是什么,以及其他用户知道客户被其他用户锁定的方式是什么?

回答

1

手动执行此操作的方法是在表中添加两列:布尔LOCKED和DateTime LAST_LOCKED,并在用户锁定和释放解锁时更新(定期更新LAST_LOCKED),在您的应用程序中放置到期限制,如10分钟,如果注册表被锁定超过10分钟,请解锁。

+0

这就是电影/剧院/航空公司网站如何使用基于时间的“锁定”或“预订” – Kane

+0

我正在寻找“锁定记录”,“解锁记录”和“记录锁定?内置于SQL Server的命令。但我怀疑没有这样的事情。接下来最好的是手动方法,并通过在获得锁的用户上设置一个定时器来改进它,他必须每30秒更新一次最后一次锁定时间。然后,应用程序过期超过1分钟的任何锁定将是完全安全的。 –

0

您正确的应用程序锁将难以管理,并且事务锁必须尽可能短。 有关“锁定”和“Last_Locked”列的想法很好。还会为锁定记录的日期时间添加过滤索引,以便在必要时加速解锁并找到锁定的客户。

相关问题