我有两个文本框,用户可以通过日历选择器,开始日期和结束日期输入日期。我想检索这两个日期之间的记录总和,但是当我运行我的代码时,它似乎给出了日期之间不同的奇数和计数,总和是完全错误的。一个问题是数据库中的日期并不是全部采用相同的格式,第二个问题是如果没有选择日期,我想要整个数据库中的记录总数。如何修改下面的SQL语句以检索正确的结果?
using (OleDbCommand com = new OleDbCommand("SELECT * FROM JournalEntries WHERE JournalDate BETWEEN'" + txtStartDate.Text + "' and '" + txtEndDate.Text + "'", con))
日期格式为DD / MM / YYYY。
答案 0 :(得分:0)
如果你指的是DateTimePicker
,这里有一些代码会告诉你两个DateTimePickers
的值与表示差异的格式化字符串之间的区别。
// dTP = DateTimePicker
DateTime startTime = dTPStart.Value;
DateTime endTime = dTPEnd.Value;
TimeSpan diff = endTime - startTime;
String difStr = string.Format("{0:00}:{1:00}:{2:00}", (int)difStr.TotalHours, difStr.Minutes, difStr.Seconds);
至于你的数据库,这就是我所知道的。是你的。我不确定它使用的日历格式。
答案 1 :(得分:0)
只要数据库中的日期存储为日期,txtdate.text就可以工作。我想你想要得到某个领域的总和,
using (OleDbCommand com = new OleDbCommand("SELECT Sum(your field) As MYSUM FROM JournalEntries WHERE JournalDate between (your dates) Group by (your field)), conn)
并且假设如果你没有选择任何日期,你需要以某种方式知道用户没有选择日期,然后使用if else来确定要执行的查询,当然第二个查询将没有where子句...我希望它适合你,如果我没有任何帮助,我很抱歉
答案 2 :(得分:0)
首先你需要两个命令。
您需要确保使用文本框发送的日期格式正确。通常格式为yyyy-MM-dd。
此外,Date的数据库列应为date而不是varchar或其他任何类型。这应该有助于保持所有存储日期的一致性。