При преобразовании .NET DateTime (когда значение по умолчанию (DateTime)) в SqlDateTime я должен всегда проверять, существует ли дата .NET между SqlDateTime.MinValue и SqlDateTime.MaxValue [или] Есть ли хороший способ сделать это.
Преобразование .NET DateTime в SqlDateTime
Ответ 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. Это может быть допустимое бизнес-правило, но это не вызовет проблемы.
Ответ 3
Также помните, что резолюции [квант времени] различны.
http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx
SQL один - 3,33 мс, а .net - 100 нс.
Ответ 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"}'");