![](/img/trans.png)
[英]How to pass GUID parameters to SQL Server through a stored procedure?
[英]How to pass multiple parameters from a loop to SQL Server Stored Procedure
我有此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)如果所有參數都是字符串,則用定界符(在任何字符串中均不存在)連接值,將其傳遞給SP並在SP中拆分
2)否則,填充表格並將其傳遞給SP( https://docs.microsoft.com/zh-cn/sql/relational-databases/tables/use-table-valued-parameters-database-engine )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.