You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用参数化OLEDB命令更新MS Access时抛出OleDbException参数缺失错误

问题解决方法

  • 替换命名参数为位置占位符
    OLE DB 驱动访问Access数据库时不支持按参数名匹配,仅严格按照参数在SQL语句中出现的先后顺序匹配参数。建议将SQL语句中的所有命名参数占位符替换为?,无需保留参数名,当前你添加参数的顺序和SQL参数顺序一致,替换后无需调整参数添加顺序:
string x =
    "UPDATE CharMain " +
    "SET CharMain.SpeciesAndStock = ?, " +
        "CharMain.Mig = ?, " +
        "CharMain.Con = ?, " +
        "CharMain.Dex = ?, " +
        "CharMain.Per = ?, " +
        "CharMain.[Int] = ?, " +
        "CharMain.Res = ?, " +
        "CharMain.[Size] = ?, " +
        "CharMain.Stride = ? " +
    "WHERE CharMain.[ID] = ?;";
  • 处理空值参数
    如果任意传入参数(比如speciesStock、array集合中的取值、size等)为C#的null,OLE DB驱动会判定该参数未传值,直接抛出对应异常。需要将所有C#空值替换为DBNull.Value后再传入参数,示例如下:
param[0] = new OleDbParameter("@SpeciesStock", speciesStock ?? DBNull.Value);
// 其余所有参数都按照该逻辑处理空值即可
  • 可选优化:显式指定参数类型
    可以给每个参数显式指定OleDbType,避免驱动自动类型推断出错,示例:
param[0] = new OleDbParameter("@SpeciesStock", OleDbType.VarChar) { Value = speciesStock ?? DBNull.Value };

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:02