【发布时间】:2017-08-09 08:43:35
【问题描述】:
我使用以下代码将列表值插入到表中。 我参考这个链接来实现这个过程。 Passing list of objects to a SQL Server stored procedure and insert records using asp.net core
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() 中收到“指定的演员表无效”错误。我能得到任何线索吗?
谢谢。
【问题讨论】:
-
将 hotelId 设为可为空是最好的主意。
-
拥有一个我们可以实际检查的minimal reproducible example 会有很大帮助,但乍一看,您似乎以与元数据数组不同的顺序将参数传递给
SetValues- 具体来说,您似乎将Status传递到LastUpdatedDate可能出现的位置。
标签: c# sql-server asp.net-mvc stored-procedures