簡體   English   中英

如何從存儲過程中獲得所需的返回值?

[英]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()返回受影響的行數Exec​​uteScalar()返回第一行的第一列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM