从存储过程获取null返回值

时间:2016-03-11 17:28:29

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

我试图从存储过程中获取字符串返回值,但我得到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

1 个答案:

答案 0 :(得分:0)

在添加任何其他参数之前尝试添加@Result,因为它是一个Output参数。重新排列下面列出的代码。它过去对我有用。我可能会因此受到抨击,但现在是星期五。

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