2017-08-09 70 views
0

我有如下所示的對象列表。使用存儲過程將對象列表保存到單獨的表中

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

我不知道如何通過使用上述相同的存儲過程獲取酒店詳細信息。有人可以幫我嗎?

感謝

+0

您是否嘗試調試您的項目?你的SP只是插入一個只有一個「字段名稱」的記錄,最多爲15個字符。 –

+0

是的。我正在爲我的對象獲得正確的值。但我不知道如何將@XHotelInfoDetails插入到我的存儲過程中以保存數據。 –

+0

創建一個單獨的SP來保存一個'Hotel'並使用一個循環來保存每個(在一個事務中) –

回答

0

當使用SQL參數,它看起來像:

exec SP_Details_Insert "InputValueHere" 

你必須在你的多領域:

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

現在,如果你想Insert這一切記錄您的Stored Procedure無法處理此數據,因爲它只使用一個參數值VALUES( @RequestReference, )

您需要在您的SP中有一個與您的數據相同的多參數,並循環您的data<List>以一次插入一個。

+0

我不知道你是如何構建這個'_sqlHelper.SqlSpExecute' –

+0

其實這不是我正在尋找的。我的存儲過程正常工作。但我不知道如何將對象列表添加到該列表中。這就是我的問題 –

+0

試圖檢查這個'_sqlHelper.SqlSpExecute'你的存儲過程的樣子。 –

相關問題