2017-10-04 4 views
0

私はWCF RESTサービスを使用して、私のOracle 12cのDB内ホリデー表に休日のリストを挿入しようとしているとして、JSONオブジェクトのリストを取ります。サービスを実行しているときにエラーは発生していませんが、サービスを実行するとデータが挿入されません。 私は)私のCMDSTRとUpdateHoliday(との問題があると考えています。どんな助けでも大歓迎です。ありがとう。WCF RESTサービスのパラメータ

IService1.cs

public interface IService1 
{ 
    [OperationContract()] 
    [WebInvoke(UriTemplate = "UpdateHoliday", ResponseFormat = WebMessageFormat.Json, Method = "POST")] 
    void UpdateHoliday(List<Holiday> Holidays); 
} 


[DataContract] 
public class Holiday 
{ 
    [DataMember(Order = 0)] 
    public string HOLIDAY { get; set; } 

    [DataMember(Order = 1)] 
    public string DESCRIPTION { get; set; } 

    public List<Holiday> Holidays { get; set; } 
} 

public class ListofHoliday 
{ 
    [DataMember] 
    List<Holiday> Holidays { get; set; } 
} 

Service1.cs

public class Service1 : IService1 
{ 
    public void UpdateHoliday(List<Holiday> Holidays) 
    { 
     List<ListofHoliday> firstStringList = new List<ListofHoliday>(); 
     string cmdStr = String.Format("INSERT INTO HOLIDAY (HOLIDAY, Description)" + 
            " VALUES('HOLIDAY','Description')"); 

     foreach (var item in firstStringList) 
     { 
      (new DbHelper()).SqlExecute(cmdStr); 
     } 
    } 


} 

DbHelper.cs

class DbHelper 
    { 
     private static string ConnectionString 
     { 
      get 
      { 
       return System.Configuration.ConfigurationManager.ConnectionStrings["cn"].ConnectionString; 
      } 
     } 

     public DataTable GetResultSet(string sql) 
     { 
      DataTable dt = new DataTable(); 
      using (OracleDataAdapter da = new OracleDataAdapter(sql, ConnectionString)) 
      { 
       da.Fill(dt); 
      } 
      return dt; 
     } 

     public void SqlExecute(string sql) 
     { 
      using (OracleCommand cmd = new OracleCommand(sql, new OracleConnection(ConnectionString))) 
      { 
       cmd.Connection.Open(); 
       cmd.ExecuteNonQuery(); 
       cmd.Connection.Close(); 
      } 
     } 

    } 

私は最終的にそれを動作させるための方法を見つけたことができました。変更は以下の通りです:あなたのサービスのオペレーションでこのコードを試すについて Service1.cs

public class Service1 : IService1 
{ 
    public void UpdateHoliday(List<Holiday> Holidays) 
    { 
     if (Holidays == null) 
      throw new ArgumentNullException("Holidays"); 

     foreach (var item in Holidays) 
     { 
      StringBuilder sb = new StringBuilder(); 
      sb.Append("INSERT INTO HOLIDAY (HOLIDAY, DESCRIPTION) VALUES "); 
      sb.AppendFormat("('{0}', '{1}')", 
       item.HOLIDAY, item.DESCRIPTION); 
      //sb.AppendFormat(";"); 
      (new DbHelper()).SqlExecute(sb.ToString()); 
     } 
    } 


} 
+0

すべてのエラーインジケータは? –

+0

私は全く何のエラーもありません。私のJsonオブジェクトのリストを送信した後、私が得るのは「応答は空でした」だけです。それがうまくいくと期待される。 :| – user5511576

+0

私はあなたがそのコードでは、しかし、あなたのサービスの操作ループでやろうとしているのか分からない、何も今までに挿入されませんれます。空のリストを作成し、それを反復して、各反復で同じ値を挿入しています。空のリストが評価されるとすぐにforループが壊れます。それはあなたが期待したものですか? –

答えて

1

豊和。以下のコードが有効な場合は、DBHelperにパラメータ付きのコマンドを受け入れるための作業がまだあります。

public class Service1 : IService1 
{ 
    public void UpdateHoliday(List<Holiday> Holidays) 
    { 
     if(Holidays==null) 
      throw new ArgumentNullException("Holidays"); 

     string cmdStr = String.Format("INSERT INTO HOLIDAY (HOLIDAY, Description)" + 
            " VALUES('HOLIDAY','Description')"); 

     foreach (var item in Holidays) 
     { 
      (new DbHelper()).SqlExecute(cmdStr); 
     } 
    } 


} 
+0

(Holiday == null)の部分は私にエラーを与えています: 'ホリデーは指定されたコンテキストでは無効な型です'。別の問題は、値( '' HOLIDAY '、' Description ')をパラメータ入力から取得することです。 – user5511576

+0

それは(休日== nullの)である必要があり、私は答えを更新します。パラメータについては、パラメータを使用してインラインSQL文字列をクレンジングする良い方法があります。私がインラインで使用して以来、これまでのところ、私はSqlCommandをどのようにパラメータ化するかを調べなければなりませんでした。 –

+0

あなたのオンラインリファレンスが見つかりました - > https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters(v=vs.110).aspx –

関連する問題