.NET DateTime в SqlDateTime Преобразование - PullRequest
50 голосов
/ 03 февраля 2010

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

Ответы [ 5 ]

93 голосов
/ 03 февраля 2010

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

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

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
2 голосов
/ 03 февраля 2010

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

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

Проверка максимальной даты на самом деле не нужна, для SQL Server и .NET DateTime максимальная дата - 31.12.9999. Это может быть допустимое бизнес-правило, но оно не вызовет проблемы.

1 голос
/ 02 июня 2011

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

при использовании EF4, столбец даты и времени «sql» может быть заполнен из DateTime .NET с помощью BitConverter.

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

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

1 голос
/ 05 февраля 2010

Также, пожалуйста, помните, что разрешения [квант времени] различны.

http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx

SQL один - 3,33 мс, а .net один - 100 нс.

0 голосов
/ 28 августа 2017

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

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