【问题标题】:Data type mismatch criteria expression "Joining between 3 tables"数据类型不匹配条件表达式“在 3 个表之间连接”
【发布时间】:2015-06-16 14:18:06
【问题描述】:

我有 3 个表:供应商、账单和付款。每个供应商都有付款和账单。我想检索这样的报告:

供应商名称 |总账单 |总付款|余额

对于由 2 DateTimePickers 指定的特定时间段。

这是我的 SQL 查询:

OleDbCommand cmd = new OleDbCommand("select c.sup_Name,c.sup_Place,sum(a.bill_Total),sum(d.pa_Value) 
from (suppliers c left JOIN bills a 
on c.sup_Id = a.bill_From) 
left join payments d on c.sup_Id = d.pa_To 
where (a.bill_Date >= '" + txbFrom.Text + "' and a.bill_Date <= '" + txbTo.Text + "') and (d.pa_EntryDate >= '" + txbFrom.Text + "' and d.pa_EntryDate <= '" + txbTo.Text + "') 
group by c.sup_Name,c.sup_Place order by c.sup_Name asc", objConn);

OleDbDataReader dataReader = cmd.ExecuteReader();// Here the error appear.

【问题讨论】:

  • 使用参数化查询,但我很确定 MSAccess 中的日期应该用 # 分隔,而不是 '。
  • 您可以提供更多信息吗?
  • @ValAsensio ,我为关系添加了一张图片
  • @RonBeyer,对不起,我说不是,但它有效:D .. (y)

标签: c# sql ms-access


【解决方案1】:

对于MySQL,我必须转换日期:dt = DateTime,它可以很容易地从DateTimePicker 中提取出来。

dt.ToString("yyyy-MM-dd H:mm:ss");

【讨论】:

  • 另外请注意,除非同时指定时间,否则时间默认为 00:00:00,因此如果检查
  • 我找到了解决方案,感谢您的帮助,只需 #date# 而不是 'date'。
【解决方案2】:

不要将参数格式化为 SQL 字符串:而是使用 OleDbParameter 为您执行此操作(并帮助避免 SQL 注入攻击)。

https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多