【问题标题】:Getting null return value from stored procedure从存储过程中获取空返回值
【发布时间】:2016-03-11 17:28:29
【问题描述】:

我正在尝试从存储过程中获取字符串返回值,但我得到了 null。存储过程运行良好并返回预期的字符串(我使用 SQL Server Profiler 检查了结果),但我的代码中出现了空字符串。

public static string GetStringValue(string pCode)
{
    String strConnString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    SqlCommand cmd = new SqlCommand();

    string returnValue = "";

    cmd.CommandText = "usp_GetStringValue";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection = new SqlConnection(strConnString);

    cmd.Parameters.AddWithValue("@pcode", pCode);
    //cmd.Parameters.AddWithValue("@Result", "");
    SqlParameter sqlParam = new SqlParameter("@Result", "");
    cmd.Parameters.Add(sqlParam);
    sqlParam.Direction = ParameterDirection.Output;
    cmd.Connection.Open();

    cmd.ExecuteScalar();

    //cmd.ExecuteNonQuery(); 
    returnValue = Convert.ToString(cmd.Parameters["@Result"].Value);

    cmd.Connection.Close();

    return returnValue;
}

这是我的存储过程

ALTER PROCEDURE [dbo].[usp_GetStringValue]

@pcode Varchar (4),
@Result varchar(5000) OUTPUT

AS
BEGIN

 SET @Result=(Select pPath from mytable where pcode = @pcode)
 print @Result

END

【问题讨论】:

  • 来自 MSDN:对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也是-1看看这个可能对你有帮助:stackoverflow.com/a/32736842/2946329
  • 如果它是输出而不是使用 ParameterDirection.Output,你返回的变量类型是什么
  • cmd.Parameters["@Result"].Value 的值是多少?
  • @Umm E Habiba Siddiqui,如果存储过程对RETURN 没有做错,您的代码应该可以工作。可以展示一下吗?
  • 您需要显示存储过程的声明,以及在存储过程中使用RETURN。如果你不使用RETURN,而是在你的存储过程声明中使用@Result varchar(50) OUTPUT,那么你的代码是不正确的。

标签: c# sql-server stored-procedures return-value


【解决方案1】:

尝试在添加任何其他参数之前添加@Result,因为它是一个输出参数。重新排列代码,如下所示。过去它对我有用。我可能会为此大发雷霆,但现在是星期五。

     SqlParameter sqlParam = new SqlParameter("@Result", "");
        cmd.Parameters.Add(sqlParam);
        sqlParam.Direction = ParameterDirection.ReturnValue;
 cmd.Parameters.AddWithValue("@pcode", pCode);

【讨论】:

  • 输出参数与返回参数不同。输出参数使用ParameterDirection.Output,返回参数使用ParameterDirection.ReturnValue,问题是OP没有明确他是使用返回参数还是输出参数。
  • 我正在使用输出参数
  • 我有另一个问题,pCode 来自 ComboBox,第一次它给了我正确的输出字符串,但是当我更改 ComboBox 值并点击按钮以获取新输出但它显示第一个输出。
  • 它只工作了一次,我再次执行应用程序和同样的情况
猜你喜欢
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多