zoukankan      html  css  js  c++  java
  • 用乐观并发方式处理数据库并发冲突以保证数据一直性的代码处理方法

    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异常。

    我这里是乐观处理的方式,在我的项目里没有用悲观方式处理过,希望有这悲观方面处理经验同学能给出你的悲观处理策略(详细为好)

    注:乐观锁:完全依靠数据库自己来管理锁的工作。
    悲观锁:程序员自己管理数据或对象上的锁处理。

  • 相关阅读:
    关于 self 和 super 在oc 中 的疑惑 与 分析
    面向对象总结
    OC面向对象的三大特征
    Web jsp开发学习——Servlet提交表单时用法
    Web jsp开发学习——Servlet提交表单时用法
    Web jsp开发学习——点击菜单页面切换
    Web jsp开发学习——点击菜单页面切换
    珍藏的数据库SQL基础练习题答案
    珍藏的数据库SQL基础练习题答案
    数据库SQL语言学习--上机练习3(插入 更新 删除)
  • 原文地址:https://www.cnblogs.com/chenlulouis/p/1772235.html
Copyright © 2011-2022 走看看