我有如下所示的對象列表。使用存儲過程將對象列表保存到單獨的表中
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'並使用一個循環來保存每個(在一個事務中) –