我有多个用户,我可以锁定网页,以便一次只有一个用户可以更新记录吗?

时间:2012-06-28 12:51:41

标签: asp.net .net sql tsql

任何人都可以帮助或向我提供以下查询的一些建议。

我有一个网络表单(会议纪要)和8位需要访问此网页并更新其区域的用户。用户可能有多个区域需要更新,基本上我想在某个用户使用它时如何锁定网页,这样任何其他用户都无法更新此网页,直到joe bloggs完成它为止。< / p>

我设置了一个Active Directory安全组,仅将网站限制为该组用户,但我需要考虑上述解决方案吗?

有没有办法可以通过网页控制或通过SQL来实现这一目标?

3 个答案:

答案 0 :(得分:2)

必须有更好的方法来做到这一点。但是,您是否可以引入类似于“UpdateInProgress”(位)的sql表列。任何更新过程都会看到该列,如果为0,那么它将更新为1,然后将更改和更新保存回0,以便表单可供其他人更新。如果更新过程看到1,则无法更新Web表单,因为正在进行更新。

我还建议引入另一个名为“UpdateInProgressBy”的列来检查谁已经打开它进行编辑。

答案 1 :(得分:2)

首先,我们必须注意,从用户读取数据,在页面中获取数据,更改数据然后尝试将数据写回来的那一刻起,就会有很长的时间。因此,我们不是在讨论SQL上的lock命令,而是在毫秒内发生任何其他锁定并帮助同步线程,但在这里我们必须同步人员和他们写的内容。

如果用户因任何原因离开页面也会出现问题,这可能会导致数据永久锁定。

这个问题可以用两种方法解决。

简单,当用户尝试保存数据时,您必须检查中间是否更改了相同的数据,并警告他,或显示合并对话框,或合并programmaticall,或者类似的东西 - 我不知道你赢了什么。

困难的方法是持续监控读取和更改数据的页面,并将此监控结果保存在数据库中的公共表中,如果用户已经并且继续使用页面,其余用户得到警告和只读数据,直到用户离开。

此监视器必须使用javasript,即使用户放弃该页面也必须知道。

答案 2 :(得分:0)

将交易隔离级别设为SERIALIZABLE

有关更多信息,请查看此链接: http://msdn.microsoft.com/en-us/library/ms173763.aspx