Я хочу фильтровать свои данные на основе даты и времени

#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. Значение;. Он выделяется как предупреждение. но фильтр по-прежнему терпит неудачу после попытки