微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有日期分隔符的 C# 和 MS Access SQL

如何解决带有日期分隔符的 C# 和 MS Access SQL

我遇到了这个查询错误

"SELECT COUNT(*) AS x FROM accounts_info ";
        query += "INNER JOIN customers_info ON accounts_info.cust_code = customers_info.cust_code ";
        query += "WHERE accounts_info.date_due >= #@a# AND accounts_info.is_paid = 0";

OleDbCommand cmd = new OleDbCommand(query,con);
String aaa = DateTime.Now.ToString("MM/dd/yyyy");
cmd.Parameters.AddWithValue("@a",aaa);

哪个错误告诉我:附加信息:查询表达式“accounts_info.date_due >= #@a# AND accounts_info.is_paid = 0”中的日期语法错误

是否可以在日期分隔符 #1/13/2021# 中插入参数,例如 #@param@#

解决方法

两件事

  • 删除#
  • 使参数值成为日期而不是字符串

喜欢...

"SELECT COUNT(*) AS x FROM accounts_info ";
    query += "INNER JOIN customers_info ON accounts_info.cust_code = customers_info.cust_code ";
    query += "WHERE accounts_info.date_due >= @a AND accounts_info.is_paid = 0";

OleDbCommand cmd = new OleDbCommand(query,con);
cmd.Parameters.AddWithValue("@a",DateTime.Now.Date); //.Date will remove time portion from date

附注..

OLEDB 不处理命名参数。您可以将它们与名称放在一起,但您提供的名称无关紧要,重要的是顺序.. 参数集合必须包含相同数量的参数,并且与它们在 SQL 中出现的顺序相同。出于这个原因,并且为了不至于认为参数名称可以在查询中多次重复使用,有些人使用 ?参数占位符的标记

"SELECT COUNT(*) AS x FROM accounts_info ";
    query += "INNER JOIN customers_info ON accounts_info.cust_code = customers_info.cust_code ";
    query += "WHERE accounts_info.date_due >= ? AND accounts_info.is_paid = 0";

OleDbCommand cmd = new OleDbCommand(query,con);
cmd.Parameters.AddWithValue("p1",DateTime.Now.Date);
,

您的查询在下面给出您的查询。

SELECT COUNT(*) AS x FROM accounts_info
INNER JOIN customers_info ON accounts_info.cust_code = customers_info.cust_code
WHERE accounts_info.date_due >= #@a# AND accounts_info.is_paid = 0

所以请从查询中删除 #

另外请创建一个存储过程并传递参数,而不是在代码中编写查询。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。