• 用乐观并发方式处理数据库并发冲突以保证数据一直性的代码处理方法


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

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

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

  • 相关阅读:
    腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)
    MySQL Server 5.0 下载与 安装指南[图文] (安装到非系统路径+设置root账号相应password)
    UISearchDisplayController UISearchBar
    第八届蓝桥杯JavaB组省赛真题
    第八届蓝桥杯JavaA组省赛真题
    第八届蓝桥杯JavaA组省赛真题
    第八届蓝桥杯JavaA组省赛真题
    第八届蓝桥杯JavaA组省赛真题
    第八届蓝桥杯JavaA组省赛真题
    第七届蓝桥杯JavaC组省赛真题
  • 原文地址:https://www.cnblogs.com/chenlulouis/p/1772235.html
Copyright © 2020-2023  润新知