#c# #asp.net #sql
#c# #asp.net #sql
Вопрос:
У меня есть два текстовых поля, в которых пользователь может вводить даты с помощью средства выбора календаря, дату начала и дату окончания. Я хочу получить сумму записей между этими двумя датами, однако, когда я запускаю свой код, кажется, что он выдает странные подсчеты сумм, которые различаются между датами, суммы совершенно неверны. Одна проблема заключается в том, что даты не все в одном формате в базе данных, а вторая проблема заключается в том, что мне нужна общая сумма записей во всей базе данных, если даты не выбраны. Как я могу изменить свою инструкцию SQL ниже, чтобы получить правильные результаты?
using (OleDbCommand com = new OleDbCommand("SELECT * FROM JournalEntries WHERE JournalDate BETWEEN'" txtStartDate.Text "' and '" txtEndDate.Text "'", con))
Даты указаны в формате ДД/ММ/ГГГГ.
Комментарии:
1. Вам нужно убедиться, что текстовые поля находятся в формате, распознанном SQL, но в то же время вам также нужно убедиться, что я не могу добавлять инъекции. Ваш код как есть, я мог бы просто удалить и создать таблицы и т.д. Все в вашем заявлении
2. Когда вы говорите, что одна из проблем заключается в том, что даты не все в одном формате в базе данных, означает ли это, что вы сохраняете дату как varchar / nvarchar вместо datetime?
3. Если вы используете a
DateTimePicker
, чтобы получить отображаемую дату, используйте.Value
свойство. В a нет такого понятия , как текстDateTimePicker
.4. Пожалуйста, разместите больше кода.
Ответ №1:
Сначала вам понадобятся две команды.
- Для всех записей
- Для записей с привязкой к дате
Вам нужно убедиться, что дата, которую вы отправляете с помощью текстовых полей, находится в правильном формате. Обычно используется формат гггг-ММ-дд.
Кроме того, столбцы вашей базы данных для Date должны иметь тип date, а не varchar или что-то еще. Это должно помочь сохранить единообразие для всех сохраненных дат.
Ответ №2:
Если вы ссылаетесь на a 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);
Что касается вашей базы данных, это все, что я знаю об этом. Это ваше. Я не уверен, какой формат календаря он использует.
Ответ №3:
Пока даты в базе данных хранятся как date, 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 …Я надеюсь, что это сработает для вас, извините, если я не помог