Добавить days to DateTime возвращает значение 0?

Этот код подсчитывает количество записей в таблице MSSQL, где дата находится между сегодняшней датой и сегодняшней датой + 8 дней, но она не работает; он возвращает значение 0 , но 2 – правильный ответ.

Если я изменил DateTime.Now.AddDays на 7 или меньше, он будет работать так, как должен.

 //Ordre klar til bestilling command.CommandText = "SELECT COUNT(*) from bestillinger WHERE udlevering BETWEEN @date and @dateadd"; command.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd/MM/yyyy")); command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(+8).ToString("dd/MM/yyyy")); con.Open(); command.ExecuteNonQuery(); string result0 = command.ExecuteScalar().ToString(); con.Close(); MessageBox.Show(result0); if (result0 != "0") { bestillingToolStripMenuItem.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF1919"); } 

Не обрабатывайте даты / время как строки. Просто:

 command.Parameters.AddWithValue("@date", DateTime.Now); command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(8)); 

Проблемой могут быть форматы даты и времени.

Обратите внимание, что вы фактически выполняете его дважды без причины; вы можете удалить команду command.ExecuteNonQuery() .

Наконец, не обрабатывайте целые числа как строки:

 int count = (int)command.ExecuteScalar(); if(count != 0) { .... } 

Через семь дней это еще сентябрь, и дата выглядит следующим образом:

30/09/2014

Через восемь дней это октябрь, и дата выглядит так:

01/10/2014

Поп-викторина: 01/10/2014 относится к 1 октября или 10 января? Очевидно, вы имеете в виду, что это относится к 1 октября, но части мира (и, вероятно, Sql Server) вместо этого прочитают это как 10 января.

Решение здесь заключается в том, что вы не должны передавать параметры даты в виде строк! Просто удалить полностью вызовы .ToString() , вероятно, достаточно, чтобы исправить это в этом случае, но я предпочитаю быть явным в отношении типов моей базы данных :

 command.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Today; command.Parameters.Add("@dateadd", SqlDbType.DateTime).Value = DateTime.Today.AddDays(8); 

Конечно, вышеупомянутое исправление предполагает, что вы сделали разумную вещь в своей базе данных. Возможно, вы допустили ошибочную ошибку при сохранении ваших дат в качестве полей варчара. Если вы это сделали, Sql Server сравнивает ваши поля как строки, и в соответствии с вашим примером формат в начале месяца всегда будет сортироваться до дат позже в течение месяца, даже в разные месяцы. Это означает, что дата окончания вашего примера была до даты начала. Если это ваша проблема, вам нужно добавить новый столбец Date в таблицу и написать код, чтобы обновить ваши строки с помощью преобразованных значений даты. Скорее всего, вам нужно будет координировать это с фиксацией других частей вашего приложения, которые вставляют, обновляют и выбирают в этом поле.

Основной урок, чтобы убрать это: НИКОГДА не относитесь к датам как к строкам! Это относится ко всем уровням вашего приложения, за исключением уровня представления.

  • Какую строку формата я могу использовать для анализа Oracle TIMESTAMP?
  • Сохранить дату и время в таблице sql
  • Преобразование строки с форматом «YYYYMMDDHHMMSS» в datetime
  • Классический ASP + TSQL: выпуск формата DateTime
  • Interesting Posts

    Заказать по умолчанию по умолчанию для SQL Server Management Studio?

    Ухудшается ли производительность SQL по мере увеличения числовых элементов в предложении «IN»?

    Ограничить запрос SQL / LDAP до 901 строк

    Создайте идентификатор группы, возможно, с RANK или ROW_NUMBER, чтобы укрепить значения строк с неуловимыми последовательными чередованиями в SQL Server

    sql-сервер, каскадное удаление и родительская / дочерняя таблица

    Зачем использовать JOIN, а не внутренние запросы

    Возвращение Scope_Identity из двух вставных операторов одновременно в SQL Server

    SQL Server 2008 VarChar (Max) возвращает только 8000 символов. Зачем?

    Ошибка обновления SQL. Конфликт FK

    Когда / как использовать тип данных SQL Server XML?

    Структура XML в SQL Server

    JDBC выполняет хранимую процедуру SQL Server с возвращаемым значением и параметрами ввода / вывода

    Почему эти дублирующие результаты T-SQL

    Эффективная структура SQL OLAP для SQL-запросов

    SSRS Формат строки на дату DD MMM YYYY HH MM

    Давайте будем гением компьютера.