如何从存储过程中获取所需的返回值?

时间:2017-06-22 13:47:28

标签: c# stored-procedures

我正在尝试调用存储过程并返回<math.h>而不是返回值。我附上了我正在使用的存储过程的图像。

我按如下方式执行存储过程:

@KeyNo

然而,在调用它之后,它返回0而不是172155.有关如何解决此问题的任何建议吗?

存储过程:

enter image description here

4 个答案:

答案 0 :(得分:1)

当您尝试返回值时,应使用ExecuteScalar而不是ExecuteNonQuery。

这里有一个例子: ExecuteScalar

答案 1 :(得分:0)

   SqlDataReader lSqlDataReader = lSqlCommand.ExecuteReader();
    while (lSqlDataReader.Read())
      Here you get all return values in lSqlDataReader

UPDATE 编辑您的程序

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");
  }

答案 2 :(得分:0)

基于这些评论,我认为你会混淆很多概念。看起来您需要OUTPUT,而不是RETURN值。

我仍然不清楚你想对你的数据表做什么,但这就是你如何为每一行&#34;行获取一个新密钥&#34;:

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;
    }
}

答案 3 :(得分:-1)

ExecuteNonQuery()返回受影响的行数 ExecuteScalar()返回第一行的第一列