#c#
#c#
Вопрос:
В моей базе данных есть столбец даты и времени, отформатированный как («дд / ММ / гггг чч: мм: ss tt») Когда я пытаюсь получить данные на основе выбранного времени, ничего не отображается. но если я отформатирую дату как («дд / ММ / гггг»). Это работает идеально
cmd = new SqlCommand("select * from workdays where date " " between @fromdate and @todate", con);
cmd.Parameters.AddWithValue("@fromdate", DbType.DateTime).Value = dtpFromDate.Value.ToString("dd/MM/yyyy hh:mm:ss tt");
cmd.Parameters.AddWithValue("@todate", DbType.DateTime).Value = dtpToDate.Value.ToString("dd/MM/yyyy hh:mm:ss tt");
sda = new SqlDataAdapter(cmd);
dt = new DataTable();
sda.Fill(dt);
Комментарии:
1. Просто снимите
.ToString
детали. Даты и время не являются строками. Преобразование их в строки используется для их отображения, а не для работы с ними.2. Кроме того, просто чтобы вы знали: AddWithValue — это зло , AddWithValue — это зло! , и можем ли мы уже прекратить использовать AddWithValue()? .
Ответ №1:
Вам вообще не нужно указывать параметр datetime в вашем запросе, просто выполните:
cmd.Parameters.Add("@fromdate", DbType.DateTime).Value = dtpFromDate.Value;
Редактировать:
Исправлена ошибка, отмеченная @Steve в комментариях. AddWithValue
второй параметр — это фактическое значение, которое будет использоваться для параметра, а не тип.
ПРАВКА 2:
Использование Add
рекомендуется, хотя, как подчеркнуто @AndrewMorton
Комментарии:
1. Второй параметр в AddWithValue — это не тип, а Значение. Ваш код правильный для добавления вместо
2. @NikitaChayka Ошибка заключалась в использовании AddWithValue вместо Add . Первое часто работает, но иногда может привести к ошибкам (см. Мой комментарий к вопросу).
3. @AndrewMorton согласен
4. Для всех я ценю ваш быстрый ответ на помощь мне
5. Когда я попробовал это cmd.Parameters.Add(«@fromdate», DbType.DateTime). Значение = dtpFromDate. Значение;. Он выделяется как предупреждение. но фильтр по-прежнему терпит неудачу после попытки