过程或函数“SP”需要参数“@param”,但未提供该参数

Posted

技术标签:

【中文标题】过程或函数“SP”需要参数“@param”,但未提供该参数【英文标题】:Procedure or function 'SP' expects parameter '@param', which was not supplied 【发布时间】:2020-12-14 18:21:58 【问题描述】:

我在 C# 代码中遇到了这个错误。在 SQL Server 中执行存储过程是没有问题的。

过程或函数“SP”需要参数“@outputparam”,但未提供。

public string function1(int param1, string param2)

    SqlDataAdapter sqladapter = new SqlDataAdapter();
    SqlConnection conn = new SqlConnection(strcon);
    SqlCommand cmd;

    cmd = new SqlCommand("SP", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@param1", param1);
    cmd.Parameters.AddWithValue("@param2", param2);

    SqlParameter returnParameter = cmd.Parameters.Add("@outputparam", SqlDbType.NVarChar);
    returnParameter.Direction = ParameterDirection.ReturnValue;

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

    return cmd.Parameters["@outputparam"].Value.ToString();

CREATE PROCEDURE [dbo].[SP] 
    (@param1 int,
     @param2 nvarchar(50),
     @outputparam nvarchar(20) OUTPUT)

【问题讨论】:

那不是返回值,那是输出参数。更改参数类型。 我强烈建议不要使用addwithvalue 提示:您可以使用带有 Add 的显式初始化程序来处理其他选项,例如sqlCommand.Parameters.Add( new SqlParameter() ParameterName = "@Filename", SqlDbType = SqlDbType.VarChar, Size = 256, Direction = System.Data.ParameterDirection.InputOutput, Value = "Foo.bar" );. 【参考方案1】:

试试这些代码

SqlParameter returnParameter = cmd.Parameters.Add("@outputparam", DbType.String);
returnParameter.Direction = ParameterDirection.ReturnValue;

改成

cmd.Parameters.Add("@outputparam", DbType.String, ParameterDirection.Output);

return cmd.Get<string>("@outputparam");

【讨论】:

以上是关于过程或函数“SP”需要参数“@param”,但未提供该参数的主要内容,如果未能解决你的问题,请参考以下文章

delphi 过程或函数需要参数,但未提供

存储过程或函数需要未提供的参数

存储过程或函数需要未提供的参数

存储过程参数名称和实体框架

当我将参数传递给类构造函数时,是否需要其他名称相同或自已的函数可用?

C#使用输出变量调用存储过程时出错,未提供参数