DBF dBase - Where子句日期运算符/操作数类型不匹配错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBF dBase - Where子句日期运算符/操作数类型不匹配错误相关的知识,希望对你有一定的参考价值。

尝试对包含where子句的dbf dBase进行查询,以仅选择日期在01/01/2018之后的行

我已尝试过这个帖子中的所有选项,但无济于事。 how to query DBF(dbase) files date type field in where and between clause

command.CommandText = string.Format(@"SELECT * FROM PAYHIST WHERE EMPLOYEE = '{0}' 
                                            AND PAY_DATE >= '#1/1/2018 12:00:00 AM#'", employee.WorksNumber);

这会引发“操作员/操作数类型不匹配”。例外情况

between( [PAY_DATE], CTOT( "01-Jan-18 12:00:00 AM" ), CTOT( "31-Dec-18 12:00:00 AM" ))

between( [PAY_DATE], CTOT( '01 - Jan - 18 12:00:00 AM' ), CTOT( '31 - Dec - 18 12:00:00 AM' )) 

AND PAY_DATE >= {^2018-01-01}

PAY_DATE >= {D ‘2018-01-01’}

抛出输入字符串错误。

我在VS2015上运行它

任何建议都会受到欢迎。

答案

在查询时,您需要参数化您的查询,而不是将它们嵌入为字符串。 OleDB命令执行过程将为您处理数据类型。但是请注意,OleDb对基于.DBF的文件的参数使用“?”作为参数的占位符,需要添加到命令中以获取所需的每个参数...

command.CommandText = string.Format(
@"SELECT 
        PH.* 
    FROM 
        PAYHIST PH
    WHERE 
            PH.EMPLOYEE = ?
        AND PH.PAY_DATE >= ? ";

    command.Parameters.AddWithValue( "parmForEmployeeID", employee.WorksNumber );
    command.Parameters.AddWithValue( "parmForDateField", new date(2018,1,1) );

如果介于两者之间,你只需要额外的“?”占位

... WHERE 
            PH.EMPLOYEE = ?
        AND PH.PAY_DATE BETWEEN ? AND ? ";


    command.Parameters.AddWithValue( "parmForEmployeeID", employee.WorksNumber );
    command.Parameters.AddWithValue( "parmFromDate", new date(2018,1,1) );
    command.Parameters.AddWithValue( "parmToDate", new date(2018,12,31) );

有大量关于参数化查询的例子......尤其是基于Web的防止SQL注入。 - 并对此进行了阅读。

以上是关于DBF dBase - Where子句日期运算符/操作数类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL Where 子句查找超过 30 天的日期记录

如何在带有 select 语句的 where 子句中使用比较运算符?

扩展名为DBF的是什么文件啊?

您如何编写一条SQL语句来为日期值创建新列,然后在WHERE子句中查询它

在 where 子句中使用多个条件时出现关系运算符错误

SAS:在where子句中将日期时间转换为日期