OLEDB 连接抛出异常“参数太少”

Posted

技术标签:

【中文标题】OLEDB 连接抛出异常“参数太少”【英文标题】:OLEDB connection throws exception "Too few parameters" 【发布时间】:2021-03-26 07:54:05 【问题描述】:

我正在对 Access DB 执行以下 INSERT 查询...

using (var cmd = conn.CreateCommand())

    try
    
        cmd.CommandText = @"INSERT INTO mtConcepts (
                                conceptid,
                                [text],
                                incomplete)
                            VALUES (
                                @conceptid,
                                @text,
                                false)";
        cmd.Parameters.Add("@conceptid", OleDbType.BigInt).Value = concept.Id.Value;
        cmd.Parameters.Add("@text", OleDbType.LongVarWChar).Value = cG.ToString(SaveOptions.DisableFormatting);
        await cmd.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
    
    catch (AggregateException exception)
    
        ...
    
    catch (OleDbException exception)
    
        ...
    

OleDbException 被消息捕获...

参数太少。预计 2。

...我不明白为什么。

这是大约 7 年前编写的代码,并且一直工作到……最近的某个时候。

此外,如果我不对查询进行参数化,而是直接在 SQL 中传递值,那么它就可以工作。

更新

我通过安装旧版本的 Microsoft Access Database Engine 2010 Redistributable 来实现这个功能。但是,我仍然感到困惑 - 在安装这个 2010 版本之前,我使用的是最新版本的 Access(通过 Office365 安装)附带的连接,所以它应该仍然可以工作。

【问题讨论】:

【参考方案1】:

就像帮助一样。我有同样的问题,所以我将参数名称更改为问号

它工作正常;例如:

OdbcCommand cmd = new OdbcCommand("select * from Users where user_id=? and passwd=?", conn); // *

cmd.Parameters.Add(new OdbcParameter("@UserID", userid));

cmd.Parameters.Add(new OdbcParameter("@Password", password));

OdbcDataReader reader = cmd.ExecuteReader();

【讨论】:

感谢您的建议,但这对我不起作用-同样的例外。

以上是关于OLEDB 连接抛出异常“参数太少”的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试运行此代码时抛出异常..(导入到 sql 数据库)

OleDbConnection.Open() 仅在一个项目中抛出异常,相同的代码在其他项目中有效

如何在mysql数据库连接中使用抛出异常[重复]

java 中提示抛出异常

Java:抛出异常后如何终止执行后面的代码?

如何对mysql抛出异常(php)