【问题标题】:I have multiple users, can i lock the web page so that only one user at a time can update a record?我有多个用户,我可以锁定网页以便一次只有一个用户可以更新记录吗?
【发布时间】:2012-06-29 23:58:21
【问题描述】:

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

我有一个网络表单(会议纪要)和 8 个需要访问此网页并更新其区域的用户。一个用户可能有多个区域要更新,基本上我想知道如何在用户使用它时锁定网页,以便在 joe bloggs 完成之前没有其他用户可以更新这个网页。

我设置了一个 Active Directory 安全组,将站点限制为仅限该组用户,但我需要想出解决上述问题的方法吗?

有没有办法我可以通过 Web 控件或 SQL 来做到这一点?

【问题讨论】:

  • 在页面加载事件中,您可以设置一个布尔值,页面处于活动状态。如果页面处于活动状态,则将其设为只读。在页面上传事件中将其设置为非活动。您遇到的问题是如果有人离开页面然后它被锁定。或者,如果 Unload 事件没有触发,那么您有一个锁定页面。

标签: asp.net .net sql tsql


【解决方案1】:

将事务隔离级别设置为SERIALIZABLE

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这对我来说可能是一个合适的选择。我已经设置好我的 SQL 和存储过程。在不太熟悉 Javascript 但我确定我可以使用 SQL 解决它。非常感谢您的帮助。
    【解决方案3】:

    首先我们必须注意,从用户读取数据的那一刻起,在页面中获取数据,更改它们然后尝试将它们写回,这有很长一段时间。所以我们不是在谈论 SQL 上的lock 命令,更不用说任何其他在毫秒内发生并有助于同步线程的锁,但在这里我们必须同步人和他们写的东西。

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

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

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

    困难的方法是不断监控读取和更改数据的页面,并将此监控结果保存在数据库中的公用表中,如果用户一直存在并留在该表中页面,其余用户收到警告并只读数据,直到用户离开。

    这个监视器必须用 javasript 制作,并且必须知道即使用户放弃了页面。

    【讨论】:

      猜你喜欢
      • 2014-10-29
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2020-12-19
      • 2014-03-23
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      相关资源
      最近更新 更多