当我试图调用存储过程并从该过程返回值时,会收到错误消息- procedure has no parameters and arguments were supplied
以下是c代码:
using (SqlCommand command2 = new SqlCommand("getservername8", conn1))
{
command2.CommandType = CommandType.StoredProcedure;
command2.Parameters.Add("@s", SqlDbType.NVarChar, 500);
command2.Parameters["@s"].Direction = ParameterDirection.Output;
command2.ExecuteNonQuery();
string server = (string)command2.Parameters["@s"].Value;
}
以下是存储过程:
GO
ALTER procedure [dbo].[getservername9]
@s varchar(50)
as begin
declare @server_name varchar(500)
select @server_name = short_description from [Event_alerts].[dbo].[event_alerts]
select @s= SUBSTRING(@server_name, CHARINDEX('-', @server_name) + 15, 50)
return @s
end
存储过程得到执行没有错误。任何帮助将不胜感激
3条答案
按热度按时间ma8fv8wu1#
使用executescalar而不是ExecuteOnQuery。请参考。。
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=dotnet-plat-ext-3.1
bvuwiixz2#
请对您的代码进行以下更改-
将存储过程中的变量标记为
output
就像下面一样-不能像在存储过程中添加的那样返回varchar输出值。使用return语句时,存储过程总是返回整数值
here
. 在您的情况下,执行时会出现以下错误-(在.net end中也可以观察到同样的情况)。将varchar值“”转换为int数据类型时转换失败。
Remove the return statement
从存储过程中自动将值返回到.net代码。最后,使存储过程名称在.net和sql过程中保持一致。
6jygbczu3#
首先是更改存储过程名称,在使用getservername8而存储过程名称为getservername9的代码中,第二点是需要将参数标记为输出,如下面的代码所示
代码:
存储过程: