【发布时间】:2020-03-25 16:29:10
【问题描述】:
我有一个存储过程:
CREATE PROCEDURE myproc(@a nvarchar(50), @b nvarchar(100), @c bit)
AS ...
SELECT @retVal;
我有以下aspx代码:
SqlCommand cmd = new SqlCommand("myproc", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@a", a);
cmd.Parameters.AddWithValue("@b", b);
cmd.Parameters.Add("@c", SqlDbType.Bit).Value = false;
SqlParameter returnValue = new SqlParameter("@retVal", SqlDbType.NVarChar, 9999999);
returnValue.Direction = ParameterDirection.Output;
cmd.Parameters.Add(returnValue);
conn.Open();
cmd.ExecuteNonQuery();
retVal = (string)cmd.Parameters["@retVal"].Value;
conn.Close();
这给了我错误:
Procedure or function myproc has too many arguments specified.
如果我删除该行:
cmd.Parameters.Add("@c", SqlDbType.Bit).Value = false;
我收到此错误:
Procedure or function 'myproc' expects parameter '@c', which was not supplied
我已经为这条线尝试了这些替代方案:
cmd.Parameters.AddWithValue("@c", 0);
cmd.Parameters.AddWithValue("@c", false);
如何传递那个 BIT 参数?
【问题讨论】:
-
您的存储过程没有定义输出参数。
@c不是你的问题,问题是@retVal。 -
我该怎么做?我在程序结束时有一个 SELECT @retVal
-
我假设您的
@retVal被声明为@retVal [Data_Type] OUTPUT?在你的 sp -
声明 @retVal nvarchar(max);
-
存储过程只能返回一个 int。在 SP 中选择某物与返回值不同
标签: c# sql-server sql-server-2012