首页 > 数据库 > mysql教程 > 为什么 My SQL 存储过程会抛出'过程或函数 '...' 需要参数 '@参数名称',但未提供”错误?

为什么 My SQL 存储过程会抛出'过程或函数 '...' 需要参数 '@参数名称',但未提供”错误?

Barbara Streisand
发布: 2025-01-06 16:50:40
原创
309 人浏览过

Why Does My SQL Stored Procedure Throw a

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

调用存储过程将数据插入 SQL Server 数据库时,您可能会遇到错误“过程或函数‘存储过程名称’需要参数‘@参数名称’,但未提供该参数。”此错误消息可能会令人困惑,特别是如果您已验证存储过程具有正确的参数并且它们在您的代码中提供的话。

错误故障排除

要解决此问题,请彻底检查以下内容:

  • 验证参数名称和数据类型: 确保代码中的参数名称和数据类型与存储过程中定义的完全匹配。使用相同的大小写并避免任何拼写错误。
  • 检查命令类型: 将命令类型指定为 StoredProcedure 以明确指示您正在调用存储过程。省略此设置可能会导致正在执行的命令不明确。
  • 禁用默认值:如果为存储过程中的参数定义了默认值,则必须在代码中显式指定它们,即使您不想提供自定义值。
  • 参数顺序:代码中参数的顺序必须与存储过程中定义的顺序匹配。如果参数丢失或顺序混乱,则会发生错误。

示例代码更新

以下是代码的更新版本,其中显式指定了命令类型和参数值:

public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
    using var dbcon = new SqlConnection(conn);
    using var cmd = new SqlCommand();

    cmd.Connection = dbcon;
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.CommandText = "SHOWuser";

    cmd.Parameters.AddWithValue("@userName", userName);
    cmd.Parameters.AddWithValue("@password", password);
    cmd.Parameters.AddWithValue("@emailAddress", emailAddress);

    dbcon.Open();
    int i = Convert.ToInt32(cmd.ExecuteScalar());

    cmd.Parameters.Clear();
    cmd.CommandText = "tbl_pref";

    foreach (int preference in preferences)
    {
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
        cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));

        cmd.ExecuteNonQuery();
    }
}
登录后复制

通过仔细检查参数名称、数据类型、命令类型和参数排序,您可以减轻此错误并成功执行您的存储过程。

以上是为什么 My SQL 存储过程会抛出'过程或函数 '...' 需要参数 '@参数名称',但未提供”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板