C# 如何将多个参数从循环传递到SQL Server存储过程

C# 如何将多个参数从循环传递到SQL Server存储过程,c#,sql-server,asp.net-mvc,razor,model-view-controller,C#,Sql Server,Asp.net Mvc,Razor,Model View Controller,我有这个SQL Server表(示例) 我使用此存储过程显示数据: 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 S

我有这个SQL Server表(示例)

我使用此存储过程显示数据:

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();
}
public ActionResult Index()
{
var模型=新列表();
尝试
{
con.Open();
SqlCommand=newsqlcommand(“[dbo].[AMENDPARTY\u VIEW]”,con);
command.CommandType=CommandType.storedProcess;
command.Parameters.AddWithValue(“@PARTYREF”,Request.Params[“Party”]);
使用(var reader=command.ExecuteReader())
{
while(reader.Read())
{
添加(新的ViewCounterpartyDataModels()
{
ColumnName=读卡器[“ColumnName”]。ToString(),
p2kValue=读卡器[“p2kValue”].ToString()
});
}
}
con.Close();
}
捕获(例外情况除外)
{
掷骰子;
}
返回视图(模型);
}
[HttpPost]
公共操作结果更新(ViewPartyModels obj,字符串更新)
{
if(Request.Form[“Update”]!=null)
{
con.Open();
SqlCommand=newsqlcommand(“[dbo].[AMENDPARTY\u UPDATE]”,con);
command.CommandType=CommandType.storedProcess;
//command.Parameters.AddWithValue(待求解);
command.ExecuteReader();
con.Close();
}
返回视图();
}
和视图:

@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>
}
@使用(Html.BeginForm(“更新”、“修改方”、FormMethod.Post)){
@foreach(模型中的var项目)
{
@item.ColumnName
拯救
}
使用上面的代码,我在MVC表单上显示数据时没有问题

我的问题是如何将
textbox
值从循环传递到update函数的存储过程

在我的实际程序中,我的表单中有30个
文本框
,我知道在存储过程中声明30个变量并逐个传递数据是没有效率的

<>另一个要考虑的事情是如何将每个数据分配给相应的列,因为基本上,它只是从一个代码>文本框< /代码>中。
请帮我解决这个问题。提前非常感谢。

我建议两种选择:

1) 如果所有参数都是字符串,请使用分隔符(不存在于任何字符串中)连接这些值,将其传递给SP并在SP内部拆分


2) 否则,填充一个表并将其传递给SP()

可能重复的问题请不要多次问同一个问题。下次,这不是重复的标志;)@ChristianGollhardt道歉。我没有收到第一个问题的任何回复,我真的需要现在解决这个问题。好的。下次你知道这是不适当的行为。@ChristianGollhardt收到了。谢谢
@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>
}