use*_*222 4 sql-server asp.net asp.net-mvc sql-server-2008
有一个表格Accounts看起来像这样:
AccountID AccountName AccountTotalMoney
-------------------------------------------
1 Steven 600
3 Scott 800
Run Code Online (Sandbox Code Playgroud)
但是用户可以同时更新行记录,如下所示:
User A:UPDATE Accounts SET AccountTotalMoney=700 WHERE AccountID=1;
User B:UPDATE Accounts SET AccountTotalMoney=900 WHERE AccountID=1;
User C:UPDATE Accounts SET AccountTotalMoney=1000 WHERE AccountID=1;
.
.
.
Run Code Online (Sandbox Code Playgroud)
所以我想阻止多个用户同时更新同一条记录.一个接一个.
我是这方面的新手.对不起,我的英语不好.提前致谢!
有很多可能性.
[意见:我认为大多数Web应用程序都做乐观的并发处理]:
这里有一个关于乐观并发处理的好教程:http: //msdn.microsoft.com/en-us/library/bb404102.aspx
小摘要:
类似地,当两个用户访问页面时,一个用户可能正在更新记录时被另一个用户删除.或者,在用户加载页面和单击"删除"按钮之间,另一个用户可能已修改该记录的内容.
有三种并发控制策略可用:
我认为Pleuns的答案很好.更具体一点:
乐观并发 - 检查行是否已更改并执行回滚(如果有).示例:添加每次更新后增加的版本列,并在执行更新时检查版本号是否相同.
悲观的并发:更复杂.使用事务级别IsolationLevel.Serializable来锁定行,但当事务跨越多个Web请求时,这不是一个好主意.