当前位置: 首页 > 知识库问答 >
问题:

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

朱越
2023-03-14

我对C#相当陌生,我正在尝试设置对数据库中一个存储过程的调用,该过程只接受一个参数。

我得到错误“过程或函数'SP_getName'需要参数'@username',但未提供该参数。”

当我向存储过程提供参数并通过SQL management studio运行它时,它工作正常。

GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[SP_getName]
    @username = 'bob101'

SELECT  'Return Value' = @return_value

GO

然而,当我尝试调用它时,错误在于我如何传递参数,但我无法发现问题是什么。

           //create a sql command object to hold the results of the query
            SqlCommand cmd = new SqlCommand();

            //and a reader to process the results
            SqlDataReader reader;

            //Instantiate return string
            string returnValue = null;

            //execute the stored procedure to return the results
            cmd.CommandText = "SP_getName";

            //set up the parameters for the stored procedure
            cmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = "bob101";

            cmd.CommandType = CommandType.Text;
            cmd.Connection = this.Connection;

            // then call the reader to process the results
            reader = cmd.ExecuteReader();

如果您能帮我发现错误,我们将不胜感激!

我也试过看这两篇帖子,但我没有任何运气:

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

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

谢谢

共有3个答案

柯树
2023-03-14

尝试删除@

cmd.Parameters.Add("username", SqlDbType.NVarChar).Value = "bob101";
燕文昌
2023-03-14

我有这个问题,但不是关于命令类型的参数名。我的问题是,当C#调用SP时,对于每个没有值的参数,都会传递“default”关键字(我在SQL Profiler中找到它):

... @IsStop=0,@StopEndDate=default,@Satellite=0, ...

在我的例子中,我的参数类型是DateTime:

@StopEndDate datetime

.我通过在存储过程中设置此参数的默认值来解决我的问题:

@StopEndDate datetime=null
权黎昕
2023-03-14

你说:

cmd.CommandType = CommandType.Text;

因此,你只是在执行:

SP_getName

这是因为它是批处理中的第一个语句,所以您可以在没有EXECUTE的情况下调用过程,但实际上并不包括该参数

cmd.CommandType = CommandType.StoredProcedure;

或者您可以将CommandText更改为:

EXECUTE SP_getName @username;

作为补充说明,您应该避免在存储过程中使用前缀“sp_u”

另一个补充说明是使用使用与IDisposable对象一起确保它们被正确处理:

using (var connection = new SqlConnection("ConnectionString"))
using (var cmd = new new SqlCommand("SP_getName", connection))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = "bob101";
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // Do something 
        }
    }
}
 类似资料:
  • 问题内容: 我正在尝试通过调用存储过程将数据插入SQL Server数据库中,但出现错误 过程或函数“插入”期望参数“ @Emp_no”,但未提供 我的存储过程称为。我已经对其进行了彻底检查,并且没有丢失任何参数,也已经通过使用标签对其进行了检查。标签显示该值,但我不知道为什么会收到错误消息。 我的代码是 并且存储过程是 请帮我。提前致谢。 问题答案: 您需要使用: 或其他数据类型: 替换使用字符

  • 过程或函数“login”需要参数“@Abc”,但未提供该参数 4个小时的搜索和尝试,没有用我已经提供了这个参数(复制/粘贴),给程序的参数数量是相同的程序和顺序。 @Abc是一个输出参数。 存储过程定义: 调用存储过程的代码:

  • 问题内容: 我是在asp.net上的新手,后面有vb.code 我正在尝试从sql获取价值 我的密码 错误是 我已经尝试执行商店程序 并返回0非空值。 提前致谢! 问题答案: 尝试通过互换两条线。 如果是受支持的过程,还有一件事情,您应该在

  • 问题内容: 如何将sql_variant参数添加到SQL CLR存储过程?使用System.Object不起作用,并且我看不到任何可以使用的属性。 问题答案: 在“从SQL Books Online映射CLR参数数据”中,列出了“对象”作为用于映射sql_variant的正确类型。 我创建了一个简单的SQL Server项目,并向其中添加了以下类: 然后,我修改了test.sql文件以执行此存储的

  • 问题内容: 我在我的应用程序中收到一个错误,我不知道如何解决它。这是代码: 我收到的错误是与。它说 InvalidCastException无法将参数值从任务转换为字符串。 我认为这与我尝试放置位置有关(在if语句内部),但我不确定。任何帮助将非常感激。 谢谢, 马特 问题答案: 我的猜测是 t不是字符串吗?

  • 我正在开发一个框架,其中我是一个使用动态创建的参数调用存储过程。我正在运行时构建参数集合。 当我将参数传递给存储过程时,会出现此问题,但存储过程不接受此类参数。 例如,我的存储过程是: 调用存储过程: 这会引发以下错误: 这在 Sybase ASE 中工作正常,它只是忽略任何其他参数。这可以通过MSSQL服务器2008实现吗?任何帮助,非常感谢。谢谢