2017-08-09 62 views
0

我已經使用下面的代碼將列表值插入到表中。 我指這個鏈接來實現這個過程。 Passing list of objects to a SQL Server stored procedure and insert records using asp.net core在sql數據記錄中指定的強制轉換是無效的

private List<SqlDataRecord> GetHotelList(List<HotelInfo> list, string RequestRef) 
     { 
      List<SqlDataRecord> datatable = new List<SqlDataRecord>(); 

      SqlMetaData[] sqlMetaData = new SqlMetaData[12]; 
      sqlMetaData[0] = new SqlMetaData("HotelID", SqlDbType.Int); 
      sqlMetaData[1] = new SqlMetaData("RequestReference", SqlDbType.VarChar, 15); 
      sqlMetaData[2] = new SqlMetaData("FromDate", SqlDbType.DateTime); 
      sqlMetaData[3] = new SqlMetaData("ToDate", SqlDbType.DateTime); 
      sqlMetaData[4] = new SqlMetaData("Nights", SqlDbType.Int); 
      sqlMetaData[5] = new SqlMetaData("MealPlan", SqlDbType.VarChar, 10); 
      sqlMetaData[6] = new SqlMetaData("LastUpdatedBy", SqlDbType.VarChar, 50); 
      sqlMetaData[7] = new SqlMetaData("LastUpdatedDate", SqlDbType.DateTime); 
      sqlMetaData[8] = new SqlMetaData("Status", SqlDbType.Int); 
      sqlMetaData[9] = new SqlMetaData("StarCategory", SqlDbType.Int); 
      sqlMetaData[10] = new SqlMetaData("CreatedDateTime", SqlDbType.DateTime); 
      sqlMetaData[11] = new SqlMetaData("CreatedUserId", SqlDbType.VarChar, 15); 

      foreach (var info in list) 
      { 
       SqlDataRecord row = new SqlDataRecord(sqlMetaData); 
       int? hotelId = GetHoteId(info.HotelName); 
       row.SetValues(hotelId, RequestRef, info.FromDate, info.ToDate, info.Nights, info.MealPlan, info.StarCategory, info.Status, info.LastUpdatedBy, DateTime.Now, DateTime.Now, info.CreatedUserId); 
       datatable.Add(row); 
      } 

      return datatable; 
     } 

但我得到 '指定的強制轉換無效' 錯誤row.SetValues()。我能得到任何線索嗎?

謝謝。

+0

** hotelId **爲空是堅果最好的主意。 – VDN

+1

有一個[mcve]我們實際上可以檢查會幫助很多,但乍一看,您似乎是以不同的順序將參數傳遞給'SetValues'到元數據數組 - 具體來說,您似乎正在將'Status'傳遞給可能會出現'LastUpdatedDate'的位置。 –

回答

1

看起來的順序您值爲off。具體來說,您有:

sqlMetaData[5] = new SqlMetaData("MealPlan", SqlDbType.VarChar, 10); 
sqlMetaData[6] = new SqlMetaData("LastUpdatedBy", SqlDbType.VarChar, 50); 
sqlMetaData[7] = new SqlMetaData("LastUpdatedDate", SqlDbType.DateTime); 
sqlMetaData[8] = new SqlMetaData("Status", SqlDbType.Int); 
sqlMetaData[9] = new SqlMetaData("StarCategory", SqlDbType.Int); 
sqlMetaData[10] = new SqlMetaData("CreatedDateTime", SqlDbType.DateTime); 

但是,當你插入

info.MealPlan, 
info.StarCategory, 
info.Status, 
info.LastUpdatedBy, 
DateTime.Now, 
DateTime.Now 

通知StarCategory,狀態和LastUpdatedBy是如何出來的地方。

0

那麼您沒有向我們展示在這種情況下至關重要的SQL Sever部分。請用您插入的相應SQL Server代碼表更新您的問題,並且您使用的存儲過程將是最好的。

你可能會做一些值轉換爲其CASTCast and Convert功能是不正確的。

0

row.SetValues方法要反對

試試這個

row.SetValues(new object[]{hotelId, RequestRef, info.FromDate, info.ToDate, info.Nights, info.MealPlan, info.StarCategory, info.Status, info.LastUpdatedBy, DateTime.Now, DateTime.Now, info.CreatedUserId}); 
相關問題