DBF dBase - Where 子句日期 Operator/operand 类型不匹配错误
DBF dBase - Where clause date Operator/operand type mismatch error
尝试对包含 where 子句的 dbf dBase 进行查询,仅 select 日期在 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);
这会引发“Operator/operand 类型不匹配。”异常
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) );
有大量关于参数化查询的示例...尤其是基于网络来防止 SQL-注入。 -- 并仔细阅读。
尝试对包含 where 子句的 dbf dBase 进行查询,仅 select 日期在 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);
这会引发“Operator/operand 类型不匹配。”异常
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) );
有大量关于参数化查询的示例...尤其是基于网络来防止 SQL-注入。 -- 并仔细阅读。