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

问题描述 投票:0回答:2

我正在针对 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 安装),所以它应该仍然可以工作。

c# sql ms-access oledb
2个回答
0
投票

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

工作正常;例如:

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();

0
投票

将 OleDbType.BigInt 更改为 OleDbType.Integer

© www.soinside.com 2019 - 2024. All rights reserved.