Подтвердить что ты не робот

Преобразование .NET DateTime в SqlDateTime

При преобразовании .NET DateTime (когда значение по умолчанию (DateTime)) в SqlDateTime я должен всегда проверять, существует ли дата .NET между SqlDateTime.MinValue и SqlDateTime.MaxValue [или] Есть ли хороший способ сделать это.

4b9b3361

Ответ 1

Возможно ли, что дата может быть вне этого диапазона? Это происходит от ввода пользователем? Если ответ на любой из этих вопросов да, то вы всегда должны проверить - в противном случае вы оставляете свое приложение склонным к ошибке.

Вы можете легко форматировать дату для включения в оператор SQL:

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

Ответ 2

Если вы проверяете DBNULL, преобразование SQL Datetime в .NET DateTime не должно быть проблемой. Тем не менее, вы можете столкнуться с проблемами преобразования .NET DateTime в действительный SQL DateTime.

SQL Server не распознает даты до 1/1/1753. Именно в этом году Англия приняла Григорианский календарь. Обычно проверка на DateTime.MinValue достаточно, но если вы подозреваете, что данные могут иметь годы до 18-го века, вам нужно сделать еще одну проверку или использовать другой тип данных. (Я часто задаюсь вопросом, какие музеи используют в своих базах данных)

Проверка максимальной даты на самом деле не нужна, SQL Server и .NET DateTime имеют максимальную дату 12/31/9999. Это может быть допустимое бизнес-правило, но это не вызовет проблемы.

Ответ 4

в моем стремлении сделать это с помощью entitie, я наткнулся на это, просто нажав на сообщение, что я узнал...

при использовании EF4 столбец datetime sql может быть заполнен из .NET DateTime с использованием BitConverter.

EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());

также ссылка Fakrudeen привела меня дальше... спасибо.

Ответ 5

- Чтобы сравнить только часть даты, вы можете сделать:

var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");