Как я могу выполнить поиск в SQL Server по дате (дд-ММ-гггг) с помощью DateTimePicker (ММ-гггг)?

#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. ? Я не имею ни малейшего представления.