在多个用户尝试更新不同用户的详细信息时锁定sql

时间:2013-05-26 06:37:58

标签: c# asp.net

在我的网络应用程序中,我们有学生名单,我们有员工登录。当多个工作人员登录并尝试编辑两个不同的学生详细信息时,当第一个用户打开页面而第二个用户打开第二个页面时都尝试更新两个不同的学生详细信息,在更新时,第一个用户数据将不会得到更新而第二个用户数据更新。当使用断点检查时,在第一次用户更新时,它正在获取第二个用户打开的详细信息的学生ID。尝试使用Lock但在它可以进入存储过程之前,值正在改变。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

您所描述的内容听起来就像代码中处理此数据的错误(或错误)。

这里最常见的错误是使用static成员来保存实际上每个请求的数据。 static表示“每个应用域”,因此所有请求共享相同的字段。基本上:不要那样做。

找到使用静态作为机制的代码并不常见,以避免必须在不同地方之间传递数据 - 因为它可以从任何地方采集。这仍然非常不恰当地使用它。它似乎在dev机器上运行正常,因为你通常只在开发者机器上有一个并发用户。大多数人都希望网站可以扩展到多个用户。

搜索任何静态成员。如果您发现任何(可能的例外情况除了在执行期间没有改变的配置值),那么它们可能是错误的。

您也可以通过不恰当地使用缓存或应用程序状态来实现相同的错误。

答案 1 :(得分:0)

我认为您正在使用静态变量/字段或在两个相邻的标签中打开两个学生信息编辑模式,并在会话中保存编辑studentId。 当您在新选项卡中打开第二个用户时,第二个用户将被第二个用户覆盖,即使您返回学生一个选项卡并更新(执行提交详细信息),它也将为第二个用户更新。

您可以使用ViewState["StudentID"]或隐藏字段来避免此类问题,因为它们的范围位于页面内。

相关问题