错误 - 存储过程没有参数,并且在 C# 中提供了参数



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

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

使用 ExecuteScalar 而不是 Executenonquery。请参考..

https://learn.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=dotnet-plat-ext-3.1

请对您的代码进行以下更改 -

  1. 存储过程中的变量标记为output如下所示 -

    @s varchar(50) output
    
  2. 不能返回在存储过程中添加的 varchar 输出值。 使用 return 时,存储过程始终返回整数值 声明here.在您的情况下,执行时会得到以下错误 - (在 .NET 端也可以观察到相同的情况(。

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

将变量值 '' 转换为数据时转换失败 键入 int。

    存储
  1. 过程Remove the return statement,它会自动将值返回到 .NET 代码。

  2. 最后,使存储过程名称在 .NET 和 SQL 过程中保持一致。

首先是更改存储过程名称,在代码中使用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

最新更新