2017-07-19 76 views
0

我有這樣的SQL Server表(樣品)如何從一個循環到SQL Server存儲過程

----------------------------------------- 
|PartyRef|Level|Description|OtherColumns| 
|--------+-----+-----------+------------| 
|123ABCDE|3 |CASH ACCT |OTHER DATA | 
|---------------------------------------| 

我使用這個存儲過程,用於顯示所述數據傳遞多個參數:

ALTER PROCEDURE [dbo].[CRS_AMENDCOUNTERPARTY_VIEW](
    @PARTYREF NVARCHAR(50)='' 
) WITH RECOMPILE 
AS 
BEGIN 

CREATE TABLE #TempCRS 
(
    p2kValue Varchar(50), 
    ColumnName Varchar(50) 
) 

INSERT INTO #TempCRS 
    SELECT * 
    FROM 
     (SELECT 
      cast([PartyRef] AS VARCHAR(50)), 
      cast([Level] AS VARCHAR(50)), 
      cast([Description] AS VARCHAR(50)), 
      cast([OtherColumns] AS VARCHAR(50)) 
     FROM 
      [dbo].[tblParty] AS t 
     WHERE 
      [PartyRef] = @PARTYREF) AS SourceTable 
UNPIVOT 
(
    p2kValue FOR ColumnName IN 
    (  [PartyRef] 
     ,[Level] 
     ,[Description] 
     ,[OtherColumns]) 
) AS unpvt 

的輸出看起來是這樣的:

------------------------- 
|p2kValue |ColumnName | 
|----------+------------| 
|123ABCDE |PartyRef | 
|3   |Level  | 
|CASH ACCT |Description | 
|OTHER DATA|OtherColumns| 
------------------------- 

現在,對於MVC,我有這樣的模型類:

public class ViewPartyModels 
{ 
    public string ColumnName { get; set; } 
    public string p2kValue { get; set; } 
} 

控制器:

public ActionResult Index() 
{ 
    var model = new List<ViewPartyModels>(); 

    try 
    { 
     con.Open(); 

     SqlCommand command = new SqlCommand("[dbo].[AMENDPARTY_VIEW]", con); 
     command.CommandType = CommandType.StoredProcedure; 

     command.Parameters.AddWithValue("@PARTYREF", Request.Params["Party"]); 

     using (var reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       model.Add(new ViewCounterpartyDataModels() 
       { 
        ColumnName = reader["ColumnName"].ToString(), 
        p2kValue = reader["p2kValue"].ToString() 
       }); 
      } 
     } 

     con.Close(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

    return View(model); 
} 

[HttpPost] 
public ActionResult Update(ViewPartyModels obj, string Update) 
{ 
    if (Request.Form["Update"] != null) 
    { 
     con.Open(); 

     SqlCommand command = new SqlCommand("[dbo].[AMENDPARTY_UPDATE]", con); 
     command.CommandType = CommandType.StoredProcedure; 

     //command.Parameters.AddWithValue(TO BE SOLVED); 

     command.ExecuteReader(); 
     con.Close(); 
    } 

    return View(); 
} 

和檢視:

@using (Html.BeginForm("Update", "AmendParty", FormMethod.Post)){ 
<table class="table table-hover"> 
<tbody> 
@foreach (var item in Model) 
{ 
<tr> 
<td align="right"><b>@item.ColumnName</b></td> 
<td colspan="2"><input type="text" value="@item.p2kValue" name="TxtBasicInfo" id="BasicInfoID"></td> 
</tr> 
<button type="submit" name="btnUpdate">Save</button> 
} 

與上面的代碼,我在MVC形式上顯示數據沒有問題。

我的問題是如何將textbox值從循環傳遞到更新函數的存儲過程。

在我的真實程序中,我的表單中有30 textboxes,我知道在存儲過程中聲明30個變量並逐個傳遞數據效率不高。

還有一件事要考慮的是如何將每個數據分配到其相應的列,因爲基本上,它只是從一個循環中的一個textbox

請幫助我。非常感謝你提前。

+1

[MVC Razor - 如何將多個參數從循環傳遞到SQL Server存儲過程](https://stackoverflow.com/questions/ 45163749/mvc-razor-how-to-pass-multiple-parameters-from-a-loop-to-sql-server-stored-pro) –

+0

請不要問相同質疑多次。下一次,它不是重複的標誌;) –

+0

@ChristianGollhardt道歉。我沒有收到我第一個問題的回覆,現在我真的需要解決這個問題。 – theo

回答