首页 新闻 会员 周边

请问下如何保证多用户条件下,数据表操作的一致性??

0
悬赏园豆:10 [已关闭问题]

请问下如何保证多用户条件下,数据表操作的一致性,如何避免诸如:当前用户正在操作的数据项,已经被其它用户删除。

ForFreeDom的主页 ForFreeDom | 小虾三级 | 园豆:589
提问于:2010-01-01 11:10
< >
分享
其他回答(2)
0

还要这样啊,有个简单的,每个表加一列最后修改时间,修改之前两个比较一下,不相同即被修改了,提示重新加载页面,有点措:)

LittlePeng | 园豆:3445 (老鸟四级) | 2010-01-01 13:28
0

(一) concurrent 并行访问
做法 (1)
ASP.NET 的 ObjectDataSource 控件有内建此一「并行处理」的功能,默认好像是没有启用。例如若有个 FormView 控件表单,若用 ObjectDataSource 控件当数据来源,当启用 concurrent 后,用户在对 FormView 表单,做「修改(update)」或「删除(delete)」时,即会自动在内存中暂存字段的旧值,提交后,会自动和数据库中字段的值做比对。若比对符合即可顺利写入数据库;若比对不符合,表示某一个或多个字段,已在同一时间,被另一名用户改了数据库中的值,亦即发生了 concurrent 并行的情况,此时即会抛回例外,动作较慢的用户,即暂时无法 update 或 delete FormView 中的数据,只有第一个最先 update 的用户,才能写入。
可参考 ASP.NET 的书籍或在线文件。

做法 (2)
如一楼所说的做法,只不过不用 ASP.NET 内建的 concurrent,改用数据库自己自定义的一个字段去比对。优点是不用像 (1) 一样,每个 FormView 表单中的每个字段,一个一个去比对;缺点是,暂存用来比对的旧值、比对的动作,要自己手动 .net 写码处理。

 

(二) 透过 ADO.NET 撰码,配置数据库的「事务隔离等级 (Transaction Isolation Level)」。让每个事处在处理期间,别的用户不能修改或删除某一条记录。可参考 ADO.NET 的书籍或在线文件。

WizardWu | 园豆:1402 (小虾三级) | 2010-01-02 14:10
0

锁。楼上的全对。最简单可以用session控制。

船长&CAP | 园豆:318 (菜鸟二级) | 2012-05-20 01:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册