用乐观并发方式处理数据库并发冲突以保证数据一直性的代码处理方法
1.在要保证数据一致性的表中都加上时间戳字段。
2.在一个管理页面执行Update,Delete操作的时候(起码能得到实体的主键ID数据及其修改后的数据),在代码处理的时候;
(1)try
{
.
.
.
DB.Execute("update set num = @num from Orders where id = @id");
.
.
.
}
如果代码是这样处理的话,那么如果发生并发,那么会覆盖别人的修改
我在程序中这样处理来避免
(2)
try
{
.
.
.
int orgial_version = DB.Execute("select version from Orders where id = @id");
int result = DB.Execute("update Orders set num = @num,version = @version + 1 where id = @id and version = orgial_version");
if(result == 0)
{
messgebox.show("更新失败,请重新操作!");
}
else if(result == 1)
{
messgebox.show("更新成功,请重新操作!");
}
.
.
.
}
如果更新失败,提示你重复操作修改操作,继续操作管理页面上的那个修改按钮,就重复以上(2)的代码,保证了数据的一致性
另外如果是DATASET的话 它会内部维护一份原始数据,来进行乐观并发冲突处理,当发生时,需要处理DBCORRUNCYEXCEPTION异常。
我这里是乐观处理的方式,在我的项目里没有用悲观方式处理过,希望有这悲观方面处理经验同学能给出你的悲观处理策略(详细为好)
注:乐观锁:完全依靠数据库自己来管理锁的工作。
悲观锁:程序员自己管理数据或对象上的锁处理。
作者:ChenLuLouis
出处:http://www.cnblogs.com/chenlulouis/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-chenlulouisBlog。
posted on 2010-07-06 16:23 chenlulouis 阅读(2793) 评论(24) 编辑 收藏 举报