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

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

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

  • 相关阅读:
    Eclipse安装TestNG插件
    总结Selenium WebDriver中一些鼠标和键盘事件的使用
    【资料收集】AutomationGuru
    centos7.4 yum安装包出现网络不可达跟Recv failure: Connection reset by peer" 这个问题
    ubuntu配置ntp
    OpenStack-ansible ubuntu16.04安装&& centos7 安装 && openSUSE 安装OpenStack-ansible
    HSRP&&STP&&ACL
    vlan通讯&&动态路由
    cisco交换机基本配置
    cisco教程 怎么改console密码 主机名 各种模式的切换等
  • 原文地址:https://www.cnblogs.com/chenlulouis/p/1772235.html
Copyright © 2011-2022 走看看