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

 

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

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

相关文章:

  • 2021-10-27
  • 2021-09-21
  • 2021-11-08
  • 2022-12-23
  • 2022-01-26
  • 2021-08-18
  • 2021-05-31
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-15
  • 2021-04-22
  • 2021-06-25
  • 2022-03-04
  • 2022-12-23
  • 2021-12-18
相关资源
相似解决方案