错误-存储过程没有参数,c中提供了参数#

rlcwz9us  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(366)

当我试图调用存储过程并从该过程返回值时,会收到错误消息- 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

存储过程得到执行没有错误。任何帮助将不胜感激

ma8fv8wu

ma8fv8wu1#

使用executescalar而不是ExecuteOnQuery。请参考。。
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=dotnet-plat-ext-3.1

bvuwiixz

bvuwiixz2#

请对您的代码进行以下更改-
将存储过程中的变量标记为 output 就像下面一样-

@s varchar(50) output

不能像在存储过程中添加的那样返回varchar输出值。使用return语句时,存储过程总是返回整数值 here . 在您的情况下,执行时会出现以下错误-(在.net end中也可以观察到同样的情况)。

declare @s varchar(50)         
exec [dbo].[getservername9] @s

将varchar值“”转换为int数据类型时转换失败。 Remove the return statement 从存储过程中自动将值返回到.net代码。
最后,使存储过程名称在.net和sql过程中保持一致。

6jygbczu

6jygbczu3#

首先是更改存储过程名称,在使用getservername8而存储过程名称为getservername9的代码中,第二点是需要将参数标记为输出,如下面的代码所示
代码:

using (SqlCommand command2 = new SqlCommand("getservername", 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].[getservername]
@s varchar(50) output
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

相关问题