WCF REST服务将JSON对象的列表作为参数列表



我试图使用WCF REST服务将假期列表插入我的Oracle 12c DB内的假日表中。当我运行服务时,我不会遇到错误,但是运行服务时没有插入数据。我相信我的CMDSTR和UpdateHoliday()存在问题。任何帮助都得到了很大的赞赏。谢谢。

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());
        }
    }

}

在服务操作中尝试此代码的方法。如果下面的代码有效,那么您仍然需要做一些工作,以使您的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);
        }
    }

} 

最新更新