为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?

Posted

技术标签:

【中文标题】为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?【英文标题】: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 我确实在其他一些答案中看到了这一点。我认为由于我的参数与查询中的参数顺序相同,所以应该没关系吧? 【参考方案1】:

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

【讨论】:

以上是关于为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到“WebSocket 连接已关闭:代码 = 1000(OK),没有原因”

如果 render_to_response 方法没有包含在任何地方,为啥我会收到 ImportError?

为啥我会收到“服务未注册”异常,即使我没有在 Android - Java/Kotlin 中使用任何服务?

为啥我会收到错误:无法在 macOS Catalina 下运行 PySide2 程序的“uic”:“execvp:没有这样的文件或目录”?

为啥我会收到此错误? “[variable] 没有命名类型”在 C++ 中用于 std::string 数组,即使它已被包含并且在同一范围内

Visual basic System.Data.OleDb.OleDbException:“没有为一个或多个必需参数提供值。”