为啥我会收到 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:“没有为一个或多个必需参数提供值。”