我正在尝试通过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/