2016-11-15 7 views
0

C#でCLOBデータ型をado.netで更新したいのですが、(C#の)文字列データ型と(oracleの)CLOBデータ型を一致させる方法がわかりません:Oracleで予期しないデータ型が予想されるCLOBですが、文字が取得される

public static DBOperation updateMasterChild(MasterChild v_child = null, List<MasterChild> childRen = null) 
    { 
     if (v_child == null && childRen == null) 
      throw new ValidationFailedException("Must contain one MasterChild object for updating at least."); 
     if (childRen == null) 
     { 
      childRen = new List<MasterChild>(); 
     } 

     if (v_child != null) 
      childRen.Add(v_child); 

     OracleDataAdapter da = new OracleDataAdapter(); 
     StringBuilder sb = new StringBuilder(); 
     sb = sb.Append(" update MSWSCEMASTERCHILD set ticket_id = case when :ticket_id_1 is null then ticket_id else :ticket_id end,"); 
     sb = sb.Append(" LONGREFERENCEDATA = case when :LONGREFERENCEDATA_1 is null then LONGREFERENCEDATA else :LONGREFERENCEDATA end "); 
     sb = sb.Append(" where id = :id and step_count = :step_count "); 

     using (OracleConnection oraC = new OracleConnection(conStr)) 
     { 
      OracleCommand cmd = new OracleCommand(); 
      cmd.Connection = oraC; 
      cmd.CommandText = sb.ToString(); 

      oraC.Open(); 
      cmd.Transaction = oraC.BeginTransaction(); 

      try 
      { 
       foreach (MasterChild child in childRen) 
       { 
        cmd.Parameters.Clear(); 

        cmd.Parameters.AddWithValue(":ticket_id_1", child.TicketId); 
        cmd.Parameters.AddWithValue(":ticket_id", child.TicketId); 

        cmd.Parameters.AddWithValue(":LONGREFERENCEDATA_1", child.LONGREFERENCEDATA); 
        cmd.Parameters.AddWithValue(":LONGREFERENCEDATA", child.LONGREFERENCEDATA); 

        cmd.Parameters.AddWithValue(":id", child.Id); 
        cmd.Parameters.AddWithValue(":step_count", child.StepCount); 

        cmd.ExecuteNonQuery(); 
       } 
       cmd.Transaction.Commit(); 
      } 
      catch (Exception ex) 
      { 
       cmd.Transaction.Rollback(); 
       throw ex; 
      } 
     } 
     return DBOperation.Success; 
    } 

LONGREFERENCEDATAはCLOB型であり、子オブジェクトのプロパティのLONGREFERENCEDATAが文字列である私は、このフィールドに、この更新を削除した場合、それはOKですが、私は、CLOBフィールドを含むアップデートを書いた場合、それが失敗しました例外があります:CLOBは期待されていますが、charがあります。

なぜこの問題を解決するかわかりません。あなたはいくつかの提案や解決策を提供するのを助けてくれますか?

答えて

0

CLOB Oracleデータの操作は、基本データ型の場合ほど簡単ではありません。 ADO.NETでの読取り/書込みOracle CLOBデータの例は、linkを参照してください。

関連する問題