猿问

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

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

我已经尝试了此线程中的所有选项,但无济于事。 如何在 where 和 between 子句中查询 DBF(dbase) 文件日期类型字段

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 上运行它

任何建议将是最受欢迎的。


大话西游666
浏览 153回答 1
1回答

SMILET

查询时,您需要参数化您的查询,而不是将它们嵌入为字符串。OleDB 命令执行过程将为您处理数据类型。但是请注意,针对基于 .DBF 的文件的 OleDb 参数使用“?” 作为参数的占位符,需要为每个需要的参数添加到命令中...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 注入。- 并仔细阅读。
随时随地看视频慕课网APP
我要回答