我正在尝试通过C#将此消息发送到Access数据库。用户输入是通过datePicker选择的两个日期。日期选择器本身被选择为短格式。并且访问数据库字段也被选择为短日期时间。以下是我的代码

"SELECT PLADS,COUNT(*)AS Total FROM OptagetPladser " +
"WHERE( Dato Between #" + date_1 + "# AND #" + date_2 + "# AND Optaget= 0) " +
"GROUP BY PLADS HAVING Total >= " + diffResult;


问题似乎在于之间的声明。我已经使用> =日期1进行了测试,并且得到的所有结果都大于日期1。然后我尝试仅使用结果 =日期1和

最佳答案

尝试使用参数:

StringBuilder sb = new StringBuilder();
sb.AppendLine("SELECT PLADS, COUNT(*) AS Total FROM OptagetPladser");
sb.AppendLine("WHERE ((Dato Between ? AND ?) AND Optaget= 0)");
sb.AppendLine("GROUP BY PLADS HAVING Total >= ?");


使用已建立的连接:

using (OleDbCommand cmd = new OleDbCommand(sb.ToString(), cn)) {
  cmd.Parameters.AddWithValue("?", date_1);
  cmd.Parameters.AddWithValue("?", date_2);
  cmd.Parameters.AddWithValue("?", diffResult);
  using (OleDbDataReader rdr = cmd.ExecuteReader()) {
    while (rdr.Read()) {
      // do something
    }
  }
}


对于OleDb,参数基于它们在SQL字符串中出现的时间的索引,因此,“?”值的输入顺序必须与查询字符串中显示的顺序相同。

关于c# - 我无法在查询中选择日期范围,我的两次查询之间没有答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10971036/

10-12 12:45
查看更多