【问题标题】:Why am I getting the OleDbException: 'No value given for one or more required parameters.' exception?为什么我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?
【发布时间】:2022-01-11 17:53:18
【问题描述】:

我正在尝试使用参数化的 OLEDB 命令更新 MS Access 数据库。每次我尝试时,它都会给我这个例外:System.Data.OleDb.OleDbException: 'No value given for one or more required parameters.'

在 Access 中运行查询可以正常工作,但在我的 WinForm 程序中由于某种原因它失败了。

string x =
                $"UPDATE CharMain " +
                $"SET CharMain.SpeciesAndStock = @SpeciesStock, " +
                    $"CharMain.Mig = @Might, " +
                    $"CharMain.Con = @Con, " +
                    $"CharMain.Dex = @Dex, " +
                    $"CharMain.Per = @Per, " +
                    $"CharMain.[Int] = @Int, " +
                    $"CharMain.Res = @Res, " +
                    $"CharMain.[Size] = @Size, " +
                    $"CharMain.Stride = @Stride " +
                $"WHERE CharMain.[ID] = @ID;";

            OleDbCommand command = new OleDbCommand(x, Flowsheet_101___Culture.conn);
            OleDbParameter[] param = new OleDbParameter[10];
            param[0] = new OleDbParameter("@SpeciesStock", speciesStock);
            param[1] = new OleDbParameter("@Might", array["Might"]);
            param[2] = new OleDbParameter("@Con", array["Constitution"]);
            param[3] = new OleDbParameter("@Dex", array["Dexterity"]);
            param[4] = new OleDbParameter("@Per", array["Perception"]);
            param[5] = new OleDbParameter("@Int", array["Intelligence"]);
            param[6] = new OleDbParameter("@Res", array["Resolve"]);
            param[7] = new OleDbParameter("@Size", size);
            param[8] = new OleDbParameter("@Stride", stride);
            param[9] = new OleDbParameter("@ID", Flowsheet_101___Culture.thisCharID);
            command.Parameters.Add(param[0]);
            command.Parameters.Add(param[1]);
            command.Parameters.Add(param[2]);
            command.Parameters.Add(param[3]);
            command.Parameters.Add(param[4]);
            command.Parameters.Add(param[5]);
            command.Parameters.Add(param[6]);
            command.Parameters.Add(param[7]);
            command.Parameters.Add(param[8]);
            command.Parameters.Add(param[9]);

            command.ExecuteNonQuery();

【问题讨论】:

  • 来自文档“当 CommandType 设置为 Text 时,OLE DB .NET 提供程序不支持将参数传递给 SQL 语句或由 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。” docs.microsoft.com/en-us/dotnet/api/…
  • @Ralf 我确实在其他一些答案中看到了这一点。我认为由于我的参数与查询中的参数顺序相同,所以应该没关系吧?

标签: c# winforms ms-access oledb


【解决方案1】:

我意识到我一直在尝试插入出现在另一个表上的列中。我一直以为错误是在谈论缺少参数,但事实证明我只是在引用不存在的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多