【发布时间】: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