zoukankan      html  css  js  c++  java
  • ObjectDataSource并发CompareALLValues处理

      我们在使用SqlDataSource进行并发策略的时候比较容易实现,通过设置ConflictDetection值为CompareAllValues,OldValuesParameterFormatString="original_{0}"就可以在SelectCommand,UpdateCommand,DeleteCommand里面进行设置即可。 设计Account(AccountID,AccountUse ,Flag)数据库表 这里以UpdateCommand为例:

    update set AccountUse=@AccountUseFlag=@Flag where AccountID=@original_AccountID and AccountUse=@Original_AccountUse and Flag=@Original_Flag;这样可以很容易地进行SqlDataSource的并发处理。

      然而ObjectDataSource为我们提供了并发控制机制:
    ObjectDataSource 控件有一个属性ConflictDetection,可以设置应用程序中并发处理。

    ConflictDetection 也有两个可选值:

    默认设置为OverwriteChanges 这是最小化的并发冲突设置,在更新和删除的时候不会提供原始数据信息,无法进行并发控制.  
    CompareAllValues 这将给予你最大的灵活性,它将在更新和删除的时候提供原始的数据信息,所以可以进行并发控制。
    请看如下示例:
    用于ObjectDataSource的实体对象类Account类:

    Account实体类

    对于Update方法:

    ObjectDataSource在ConflictDetection= Overwrite Changes的时候要求只把现在更新的字段,以及原来的主键字段(这个名字是根据ObjectDataSource的OldValuesParameterFormatString设置的格式Original_{0}),例如Original_AccountID传进来,以便索引到更新行。

    ObjectDataSource在ConflictDetection=CompareALLValues的时候要求把现在更新的字段以及原来的所有字段全部传递进来。

    ObjectDataSource在DataObjectType设置的情况下,ConflictDetection= Overwrite Changes的时候,仅仅需要一个Account对象变量作为参数,代表更新的值。

    ObjectDataSource在DataObjectType设置的情况下,ConflictDetection=CompareALLValues的时候,需要两个Account对象作为参数,前一个变量Account acc,后一个变量Account Origina_acc,后一个变量记录了原始值。

    对于Delete方法:

    ObjectDataSource在ConflictDetection= Overwrite Changes的时候,只会把Original_AccountID的字段传递过来。

    ObjectDataSource在ConflictDetection=CompareALLValues的时候要求把Original_AccountID ,Original_AccountUse和Original_Flag全部传递过去。

    ObjectDataSource在DataObjectType设置的情况下,仅仅需要传递一个Account类型的变量就可以了。

    如下表所示:

    命令

    DataObjectType

    ConflictDetection

    OldValuesParameterFormatString

    ObjectDataSource的实体对象类Account类提供的方法

    Update

    没有设置

    Overwrite Changes

    Original_{0}

    update(int AccountID,string AccountUse,bool Flag,int Original_AccountID)

    没有设置

    CompareAllValues

    Original_{0}

    Update(int AccountID,string AccountUse ,bool Flag,int Original_AccountID, string Original_AccountUse,bool Original_Flag)

    设置

    Overwrite Changes

    Original_{0}

    Update(Account acc)

    设置

    CompareAllValues

    Original_{0}

    Update(Account acc,Account Orignal_acc)

    Delete

    没有设置

    Overwrite Changes

    Original_{0}

    Delete(int Original_AccountID)

    没有设置

    CompareAllValues

    Original_{0}

    Delete(int Original_AccountID,string Original_AccountUse,bool Original_Flag)

    设置

    Overwrite Changes

    Original_{0}

    Delete(Account acc)

    设置

    CompareAllValues

    Original_{0}

    Delete(Account acc)

     

  • 相关阅读:
    培养你的领导气质
    头痛
    张颐武:周小平的意义
    浅谈第三方电子支付平台测试方法的研究
    java基础复习二——面向对象一
    jmeter内存溢出处理方式记录
    软件质量管理的八个法则
    CMM已经落伍了,敏捷才是王道
    空间管理 您的位置: 51Testing软件测试网 » lilisx2006的个人空间 » 日志 在一个没有测试经理的小公司如何做好测试
    mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: YES)'
  • 原文地址:https://www.cnblogs.com/baozi/p/1586158.html
Copyright © 2011-2022 走看看