2017-10-04 6 views
0

WCF Rest 서비스를 사용하여 Oracle 12c DB 내 휴일 테이블에 공휴일 목록을 삽입하려고합니다. 서비스를 실행할 때 오류가 발생하지 않지만 서비스를 실행할 때 데이터가 삽입되지 않습니다. 내 cmdStr 및 UpdateHoliday()에 문제가 있다고 생각합니다. 어떤 도움이라도 많이 받아 들여집니다. 감사.WCF Rest Service로 Json 개체 목록을 매개 변수로 가져옵니다.

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

HOWA을 서비스 작업에이 코드를 시도에 대해. 아래의 코드가 작동한다면 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

(Holidays == null)이어야합니다. 답변을 업데이트합니다. 매개 변수에 관해서는 매개 변수를 사용하여 인라인 SQL 문자열을 정리하는 좋은 방법이 있습니다. SqlCommand를 매개 변수화하는 방법을 찾아야 할 것입니다. –

+0

온라인 참조 자료를 찾았습니다. -> https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters(v=vs.110).aspx –