我有如下所示的对象列表。使用存储过程将对象列表保存到单独的表中
public class Details
{
public string Reference { get; set; }
public List<Hotel> HotelDetails { get; set; }
}
我已经创建存储过程来保存详细信息表中的值。它的工作正常。以下是我的存储过程。
USE [UL_SLHEV]
GO
/****** Object: StoredProcedure [dbo].[SP_EVoucherDetails_Insert] Script Date: 8/9/2017 11:20:31 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_Details_Insert]
@XRequestReference varchar(15),
AS
BEGIN
DECLARE @RequestReference AS VARCHAR(15) = ISNULL(@XRequestReference,'')
INSERT INTO Voucher(
RequestReference,
)
VALUES(
@RequestReference,
)
END
在这里,我必须在同一个保存方法和存储过程中保存酒店详细信息列表在另一个表中。以下是我用于在表格中保存酒店详细信息的C#代码。
public EVoucherDetails SaveEVoucherDetails(EVoucherDetails detailsModel)
{
Func<SqlCommand, EVoucherDetails> injector = (cmd) =>
{
cmd.Parameters.Add("@XRequestReference", SqlDbType.VarChar).Value = detailsModel.RequestReference;
var pList = new SqlParameter("@XHotelInfoDetails", SqlDbType.Structured);
pList.TypeName = "dbo.HotelInfo";
pList.Value = GetHotelList(detailsModel.HotelInfo, detailsModel.RequestReference);
cmd.Parameters.Add(pList);
};
return _sqlHelper.SqlSpExecute("SP_Details_Insert", injector);
}
private List<SqlDataRecord> GetHotelList(List<HotelInfo> list, string RequestRef)
{
List<SqlDataRecord> datatable = new List<SqlDataRecord>();
SqlMetaData[] sqlMetaData = new SqlMetaData[11];
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("StarCategory", SqlDbType.Int);
sqlMetaData[7] = new SqlMetaData("Status", SqlDbType.Int);
sqlMetaData[8] = new SqlMetaData("LastUpdatedBy", SqlDbType.VarChar, 50);
sqlMetaData[9] = new SqlMetaData("LastUpdatedDate", SqlDbType.DateTime);
sqlMetaData[10] = new SqlMetaData("CreatedDateTime", SqlDbType.DateTime);
sqlMetaData[10] = 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, info.LastUpdatedDateTime, info.CreatedDateTime, info.CreatedUserId);
datatable.Add(row);
}
return datatable;
}
我不知道如何通过使用上述相同的存储过程获取酒店详细信息。有人可以帮我吗?
感谢
您是否尝试调试您的项目?你的SP只是插入一个只有一个“字段名称”的记录,最多为15个字符。 –
是的。我正在为我的对象获得正确的值。但我不知道如何将@XHotelInfoDetails插入到我的存储过程中以保存数据。 –
创建一个单独的SP来保存一个'Hotel'并使用一个循环来保存每个(在一个事务中) –