为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
大话西游666 2021-10-31 19:27:21
尝试对包含 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 上运行它任何建议将是最受欢迎的。
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

查询时,您需要参数化您的查询,而不是将它们嵌入为字符串。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 注入。- 并仔细阅读。


查看完整回答
反对 回复 2021-10-31
  • 1 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信