Access 查询中的数据类型不匹配异常

Posted

技术标签:

【中文标题】Access 查询中的数据类型不匹配异常【英文标题】:Data type mismatch exception in Access query 【发布时间】:2013-03-21 20:50:53 【问题描述】:

我有以下代码:

 public void GetParameterSelectionSet(int wire, int bond, string processProgramPath)
    

        string connectionString = "Provider=Microsoft.JET.OLEDB.4.0;" + "data source=" + processProgramPath + ";";
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        
            connection.Open();
            using (OleDbCommand command = new OleDbCommand("SELECT * " +
                                                        "FROM BONDS INNER JOIN WIRES on " +
                                                        "BONDS.WireID = WIRES.WireID " +
                                                        "WHERE (WIRES.OperationOrder =  '@WireOrder') AND" +
                                                        "(BONDS.OperationOrder = '@BondOrder')", connection))
            
                command.Parameters.Add(new OleDbParameter("@WireOrder", OleDbType.Numeric));
                command.Parameters.Add(new OleDbParameter("@BondOrder", OleDbType.Numeric));
                command.Parameters["@WireOrder"].Value = wire;
                command.Parameters["@BondOrder"].Value = bond;


                var mytemp = command.ExecuteScalar();
            
        

    

当我执行这个查询时,我得到一个“条件表达式中的数据类型不匹配”。

WIRES.OperationOrder 和 BONDS.OperationOrder 都是数字类型。所以我不知道为什么会失败。

提前致谢!

【问题讨论】:

WIRES.OperationOrder = '@WireOrder' 暗示一个字符串没有? 而“@BondOrder”和“@WireOrder”都是整数? BONDS.WireID 和 WIRES.WireID 是同一类型吗? 我认为以下 grahamj42 的答案是正确的,但想指出您可以像这样快捷地创建和分配参数:command.Parameters.AddWithValue("@WireOrder", wire); 【参考方案1】:

您在 SELECT 语句中为数字参数加上引号,这是不正确的。

【讨论】:

就是这样。我需要从数值中去掉单引号。谢谢!

以上是关于Access 查询中的数据类型不匹配异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 Decimal 参数的数据类型不匹配 - OleDb、C#、Access

C# Access OleDb 条件表达式中的数据类型不匹配

MS Access 报告给出“数据类型不匹配”错误,但基础查询没有

PHP ODBC 数据类型不匹配 (MS Access)

运行时错误 3464:条件表达式中的数据类型不匹配

条件表达式 Oledb Access 数据库中的数据类型不匹配