在 C# 中获取输出参数值
本文关键字:参数 输出 获取 | 更新日期: 2023-09-27 17:57:07
我有一个带有 OUTPUT 参数的存储过程:
CREATE PROCEDURE [dbo].[myStoredProcedure]
(@myValue NVARCHAR(100) OUTPUT)
AS
BEGIN
SET @myValue = (SELECT myValue FROM myTable WHERE something = 1)
SElECT @myValue;
END
我的 C# 类:
public string getOutPut()
{
string shortFooter;
string sql = "myStoredProcedure";
string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
using (SqlConnection DBConn = new SqlConnection(connStr))
{
using (SqlCommand DBCmd = new SqlCommand(sql, DBConn))
{
try
{
DBConn.Open();
DBCmd.CommandType = CommandType.StoredProcedure;
SqlParameter newSqlParam = new SqlParameter();
newSqlParam.ParameterName = "@myValue";
newSqlParam.SqlDbType = SqlDbType.NVarChar;
newSqlParam.Direction = ParameterDirection.Output;
DBCmd.Parameters.Add(newSqlParam);
DBCmd.ExecuteNonQuery();
shortFooter = DBCmd.Parameters["@myValue"].Value.ToString();
}
catch (Exception ex)
{
string blah = ex.ToString();
shortFooter = "";
}
}
}
return shortFooter;
}
这是我得到的例外:
System.InvalidOperationException: String[0]: Size 属性有一个 0 的大小无效。
我不明白的是,我以前使用过这段代码,除了在存储过程中,当我在数据库中创建新记录时,我用IDENTITY()
获取输出的值,因此类中的参数类型是 INT。但在概念上它应该是相同的,但我想我错了,只是不知道为什么。
我错过了什么?
谢谢!!
您需要指定保存输出值所需的大小。从 MSDN:
对于具有可变长度类型(例如 nvarchar)的输出参数,参数的大小定义保存输出参数的缓冲区的大小。
在代码中设置输出参数的Size
以匹配存储过程中的内容:
newSqlParam.Size = 100;
默认值为 0,这是导致异常的原因。