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

C# DBF dBase-Where子句日期运算符/操作数类型不匹配错误,c#,date,dbf,C#,Date,Dbf,尝试在dbf数据库上执行查询,其中包含where子句,以仅选择日期在2018年1月1日之后的行 我已经尝试了这个线程中的所有选项,但都没有用。 这会引发运算符/操作数类型不匹配。例外 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} 及 抛出一个输入字符串错误 我在VS2015上运行它 任何建议

尝试在dbf数据库上执行查询,其中包含where子句,以仅选择日期在2018年1月1日之后的行

我已经尝试了这个线程中的所有选项,但都没有用。

这会引发运算符/操作数类型不匹配。例外

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}

抛出一个输入字符串错误

我在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) );

有很多关于参数化查询的示例。。。特别是做基于网络的,以防止SQL注入也请仔细阅读。

command.CommandText的确切值是多少?如果您使用划界日期,则不应同时使用单个quotes@steve当我去掉单引号时,错误是缺少操作数,看起来像您的意思,因为dbase date不支持time.between语法是错误的。两者之间不是一个函数。可以用“”声明字符串,也可以用“”声明日期。两个分隔符看起来都错了。免责声明,自从我上次使用DBASET以来已经很长时间了。恐怕这仍然会导致运算符/操作数类型不匹配错误。@CM99,确认每个参数的数据类型。例如:如果员工ID是数字/整数,那么不要传入字符串,您需要一个整数参数。如果字段只是日期,请确保只传递日期,而不是日期/时间。确认后,可能需要通过显式指定数据类型来显式创建参数对象。使用Command.Parameters.Add阅读其他示例。
PAY_DATE >= {D ‘2018-01-01’}
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) );