[英]How do I get the return value I want from my stored procedure?
我試圖調用存儲過程並返回@KeyNo
而不是返回值。 我已附上我正在使用的存儲過程的圖像。
我執行存儲過程如下:
for(int row = start.Row; row <= end.Row; row++)
{
SqlCommand cmd = new SqlCommand("GetKeyNumber", homelinkconn);
cmd.CommandType= CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@KeyName", "VGMNO");
cmd.Parameters.AddWithValue("@KeyNo", SqlDbType.Int);
var returnParameter = cmd.Parameters.Add("@KeyNo", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
var key = returnParameter.Value;
dt.Rows[dt.Rows.Count-1]["VGMNO"] = key;
}
但是,在調用此方法之后,它將返回0,而不是172155。有關如何解決此問題的任何建議?
存儲過程:
嘗試返回值時,應使用ExecuteScalar而不是ExecuteNonQuery。
這里有一個示例: ExecuteScalar
SqlDataReader lSqlDataReader = lSqlCommand.ExecuteReader();
while (lSqlDataReader.Read())
Here you get all return values in lSqlDataReader
更新將您的程序編輯為
select @KeyNo as 'KeyNo', @return_value as 'Return Value';
並在C#代碼中編寫
var ReturnValue=0;
var KeyNo=0;
while (lSqlDataReader.Read())
{
ReturnValue=lSqlDataReader.GetInt("Return Value");
KeyNo=lSqlDataReader.GetInt("KeyNo");
}
基於這些評論,我認為您會混淆很多概念。 看起來您想要OUTPUT
,而不是RETURN
值。
我仍然不清楚您要對數據表執行什么操作,但這是如何為每個“行”獲取新密鑰的方法:
using (SqlCommand cmd = new SqlCommand("GetKeyNumber", homelinkconn))
{
//setup the command one time, not in every loop iteration
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@KeyName", "VGMNO");
SqlParameter par_KeyNo = new SqlParameter("@KeyNo", SqlDbType.Int);
par_KeyNo.Direction = ParameterDirection.Output;
cmd.Parameters.Add(par_KeyNo);
for (int row = start.Row; row <= end.Row; row++)
{
cmd.ExecuteNonQuery();
var key = par_KeyNo.Value;
//unlcear what you want to do here. Currently you would be
//resetting the last row over and over every iteration
dt.Rows[????]["VGMNO"] = key;
}
}
ExecuteNonQuery()返回受影響的行數ExecuteScalar()返回第一行的第一列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.