当多个用户试图更新不同用户的详细信息时锁定sql
本文关键字:用户 详细信息 锁定 sql 更新 | 更新日期: 2023-09-27 18:15:28
在我的web应用程序中,我们有学生列表,我们有员工登录。当多个员工登录并尝试编辑两个不同的学生详细信息时,当第一个用户打开页面和第二个用户打开页面时,两个用户都试图更新两个不同的学生详细信息,在更新时,第一个用户的数据不会得到更新,而第二个用户的数据更新。当使用断点检查时,在第一个用户更新时,它正在获取第二个用户打开的详细信息的学生id。尝试使用Lock,但在它进入存储过程之前,值正在更改。
您所描述的听起来就像是处理这些数据的代码中有一个(或多个)错误。
这里最常见的错误是使用static
成员来保存实际上是每个请求的数据。static
表示"每个应用程序域",因此所有请求共享相同的字段。基本上:不要那样做。
使用静态作为一种机制来避免在位置之间传递数据的代码并不少见——因为它可以从任何地方提取。这仍然是非常不恰当地使用它。它似乎在开发机器上工作得很好,因为在开发机器上通常只有一个并发用户。大多数人都想要一个可以容纳不止一个用户的网站。
查找所有静态成员。如果你发现了任何错误(可能除了配置值在执行过程中没有改变),那么它们很可能是错误的。
我认为您正在使用静态变量/字段或在两个相邻的选项卡中打开两个学生信息编辑模式,并在会话中持有编辑studentId。
当您在new选项卡中打开第二个用户时,第一个学生id将被第二个学生id覆盖,即使您回到student one选项卡并更新(执行提交详细信息),它也将为第二个用户更新。
您可以通过使用ViewState["StudentID"]
或隐藏字段来避免这种问题,因为它们的范围在页面内。