Asp.net 当两个成员试图访问某个记录时,如何锁定该记录?

Asp.net 当两个成员试图访问某个记录时,如何锁定该记录?,asp.net,sql-server,record-locking,Asp.net,Sql Server,Record Locking,我有这样的场景 我的环境是.Net2.0,VS2008,Web应用程序 当两个成员试图同时访问时,我需要锁定一个记录 我们可以用两种方法 通过前端(将sessionID和record unique number放在字典中,并将其作为静态或应用程序变量保存),我们将在响应离开该页面、客户端未连接、单击post按钮和会话退出后发布 通过后端(数据库本身的记录锁定-需要研究-我的团队成员正在寻找) 还有其他的方法吗?我是否需要在每一个步骤中考虑其他方法 我是否缺少任何条件?您不会为客户端锁定记录,因为

我有这样的场景

我的环境是.Net2.0,VS2008,Web应用程序

当两个成员试图同时访问时,我需要锁定一个记录

我们可以用两种方法

  • 通过前端(将sessionID和record unique number放在字典中,并将其作为静态或应用程序变量保存),我们将在响应离开该页面、客户端未连接、单击post按钮和会话退出后发布

  • 通过后端(数据库本身的记录锁定-需要研究-我的团队成员正在寻找)

  • 还有其他的方法吗?我是否需要在每一个步骤中考虑其他方法


    我是否缺少任何条件?

    您不会为客户端锁定记录,因为锁定记录超过几毫秒几乎是数据库中最具破坏性的操作。您应该改为使用:检测自上次读取以来记录是否已更改,并重新尝试事务(例如,您向用户重新显示屏幕)。这实际上是如何实现的,将取决于您使用的数据库技术(ADO.Net、数据集、Linq、EF等)

    如果业务域需要类似锁的行为,则这些行为始终作为数据库中的保留逻辑实现:当显示记录时,它是“保留”的,因此其他用户无法尝试进行相同的事务。预订完成、超时或取消。但“保留”从来都不是使用锁来完成的,它总是将状态从“可用”显式更新为“保留”或类似的内容


    此模式也适用于EAA的din p:

    如果您只从SQL server数据库的记录中读取数据,则无需执行任何操作!!!SQL server将负责管理对记录的多重访问。但是如果你想操纵数据,你必须使用s。

    我同意拉莫斯的观点。但是如果你需要的话。创建一个名为IsInUse的列作为位类型,如果正在访问,则将其设置为true。因为其他人在同一时间也需要相同的数据,所以你需要保存你的应用程序以防崩溃。。因此,在检索数据的每个地方,您都必须检查IsInUse是否为False。

    如果您已经在使用数据库,是否可以使用数据库的事务来实现您想要的功能?在事务中执行读取/更新,如果发生冲突,DB将回滚失败的事务,然后处理失败?第一个问题:为什么需要锁定??通常,今天的数据库使用乐观并发处理—您基本上假设一切正常(99%的情况下是这样),不必担心锁之类的问题,并且只有在发生冲突时才会对这1%的情况作出反应occurs@sarnold:对于ASP.NET来说,这不是一个好主意,在用户在其浏览器中输入/更改数据期间,您是否会保持连接/事务处于打开状态?如果他关闭浏览器会发生什么?您需要一些额外的代码来清理不再有效的锁。