#c# #sql-server
#c# #sql-server
Вопрос:
У меня есть база данных с датой (дд-ММ-гггг) и Winforms с помощью DateTimePicker (ММ-гггг).
Когда я выбираю дату в DateTimePicker, как я могу выполнить поиск в базе данных?
var sqlcomm = new SqlCommand($"SELECT SUM(sales) FROM table_name WHERE date = '{dateTimePicker1.Value.ToString("yyyy-mmm")}'", conn);
ОШИБКА:
Конфликт типов операндов: дата несовместима с int
Ответ №1:
Используйте ПАРАМЕТРЫ — как вы всегда должны! Они предотвращают внедрение SQL, а также значительно упрощают указание различных данных в различных типах.
Что-то вроде этого:
string query = "SELECT SUM(sales) FROM table_name WHERE date = @someDate;";
SqlCommand sqlcomm = new SqlCommand(query, conn);
sqlcomm.Parameters.Add("@someDate", SqlDbType.Date).Value = dateTimePicker1.Value;
Хороший, чистый и безопасный код — не нужно возиться с форматами дат и преобразовывать все в строку, не нужно выяснять, сколько одинарных или двойных кавычек использовать — просто хороший, чистый, правильный ADO.NET кодируйте так, как должно быть.
Комментарии:
1. Для меня это не работает. Если у меня есть в базе данных: 06.04.2019 и 05.04.2019. Если я выберу в date timepicker 04.2019. я получил ложные данные.
2. У меня есть datetimepicker со следующими свойствами:ShowUpDown = true, формат костюма: мм-гггг. Когда я выбираю дату в datetimepicker, он отправляет фактическую дату для запроса.. как я могу это установить?
3. @keremark08: очевидно, что вы выбираете только месяц год — это не полная дата, поэтому ее нельзя найти в базе данных. Попробуйте выбрать все три части даты — день, месяц, год — и посмотрите, работает ли это
4. Итак, в базе данных: 06.04.2019. и 05.04.2019. и 22.03.2019. Какой идеальный выбор для меня, если я хочу показать «пользователю» все данные, где 04.2019. ? Я не имею ни малейшего представления.