none
Adapterで更新日付を利用した排他制御(手動)を行う際のパラメータ設定方法 RRS feed

  • 質問

  • お世話になります。

    現在VisualStudio2005(C#)、Windowsフォームにて開発を行っています。
    OracleDataAdapterを使用し更新する際、更新日時による排他制御を行いたいのですが、
    どのように指定すれば正しくパラメータ設定が行えるのかがわからず悩んでいます。
    自動でコマンドを発行するようにすれば勝手に排他制御も行ってくれるそうですが、
    更新する項目を指定したいので手動でコマンドを発行しています。
    (DB上では更新日付はTIME STAMPです)
    以下、実際のコーディング内容です。

    ==================================
    1. 更新日時を編集せずに取得した場合
    ==================================
      (検索SQL)
      SELECT       
      AAA.CODE         CODE  ,
      AAA.NAME         NAME     ,
      AAA.UPD_DATE     UPD_DATE  
      FROM             
      AAA
      ---------------------------------
      (更新SQL)
      UPDATE  AAA            
      SET                    
        NAME        =  :name    , 
      WHERE           
        CODE        =  :code     
      AND  UPD_DATE    =  :oldUpdDate
    ------------------------------------------------------------------------------------------------
      //[UPDATE文]発行
      cmd = new OracleCommand(this.updateSQL(), connection);
      adp.UpdateCommand = cmd;
      adp.UpdateCommand.Parameters.Add("name", OracleDbType.Varchar2, 30, "NAME");
      adp.UpdateCommand.Parameters.Add("code", OracleDbType.Varchar2, 3, "CODE");
      //↓↓↓この部分です。
      adp.UpdateCommand.Parameters.Add("oldUpdDate", OracleDbType.TimeStamp, 20, "UPD_DATE").SourceVersion
            = DataRowVersion.Original;
    ------------------------------------------------------------------------------------------------

    ==================================
    2. 更新日時を文字列で取得した場合
    ==================================
      (検索SQL)
      SELECT                              
      AAA.CODE                                 CODE  ,
      AAA.NAME                                   NAME     ,
      TO_CHAR(AAA.UPD_DATE,'YYMMDDHH24MISS')       UPD_DATE  
      FROM                                  
      AAA
      ---------------------------------
      (更新SQL)
      UPDATE  AAA          
      SET                  
        NAME        =  :name    ,
      WHERE         
        CODE        =  :code   
      AND  UPD_DATE    =  TO_DATE(:p_oldUpdDate,'YYMMDDHH24MISS')
    ------------------------------------------------------------------------------------------------
      //[UPDATE文]発行
      cmd = new OracleCommand(this.updateSQL(), connection);
      adp.UpdateCommand = cmd;
      adp.UpdateCommand.Parameters.Add("name", OracleDbType.Varchar2, 30, "NAME");
      adp.UpdateCommand.Parameters.Add("code", OracleDbType.Varchar2, 3, "CODE");
      //↓↓↓この部分です。
      adp.UpdateCommand.Parameters.Add("oldUpdDate", OracleDbType.Varchar2, 12, "UPD_DATE").SourceVersion
            = DataRowVersion.Original;
    ------------------------------------------------------------------------------------------------

    ※ちなみに2の場合、下記のように文字列を直接指定すると正常に処理されます。
      adp.UpdateCommand.Parameters.Add("p_oldUpdDate", "060922172230");   
     
    以上、何か情報をお持ちの方いらっしゃいましたらご教授下さい。
    宜しくお願い致します。

    2006年9月25日 8:13