【问题标题】:Error - stored procedure has no parameters and arguments were supplied in c#错误 - 存储过程没有参数,并且在 c# 中提供了参数
【发布时间】:2020-05-25 16:52:38
【问题描述】:

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

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

【问题讨论】:

    标签: c# sql stored-procedures


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

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

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

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

      将 varchar 值 '' 转换为数据时转换失败 输入整数。

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

      2. 最终使存储的过程名称在 .NET 和 SQL 过程中保持一致

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 感谢它的工作,我刚刚删除了存储过程中的 return @s
        猜你喜欢
        • 2014-12-12
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多