2017-08-09 8 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

があなたの順序を見えるしてみてください値はオフです。具体的には、次のようになります。

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

しかし、あなたはStarCategory、ステータスとLastUpdatedByは場違いであるか

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

お知らせを挿入しながら。

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}); 
関連する問題