Исключение вне диапазона при преобразовании datetime2 в тип данных datetime
У меня есть исключение при обновлении datetime
столбец в SQL Server 2008 Express:
eventinfo.StartDateTime = DateTime.ParseExact(start,
"MM/dd/yyyy hh:mm tt",
CultureInfo.InvariantCulture);
db.Entry(eventinfo).State = EntityState.Modified;
db.SaveChanges();
Исключение:
Преобразование типа данных datetime2 в тип данных datetime привело к значению, выходящему за пределы допустимого диапазона. Оператор был прерван.
Есть идеи, как избежать этого исключения?
1 ответ
Домен типов данных Sql Server даты / времени выглядит следующим образом:
datetime2
(Точность 100 наносекунд) 1753-01-01T00:00:00.0 - 9999-12-31T23:59:59.9999999.datetime
(с точностью до миллисекунды... вроде) 1753-01-01T00:00:00.000 - 9999-12-31T23: 59: 59.997smalldatetime
(С точностью до 1 секунды) 1900-01-01T00:00:00 - 2079-06-06T23:59:59
CLR DateTime
struct также имеет точность 100 наносекунд. Это отсчет 100-секундных тиков с его эпохи (0001-01-01T00:00:00). Его домен 0001-01-01T00: 00: 00 - 9999-12-31T23:59:59.9999999.
Вы заметите расширенный домен CLR DateTime
по сравнению с SQL Server datetime2
,
Значение по умолчанию для CLR DateTime
это его эпоха (0001-01-01T00:00:00). Любое значение до 1753-01-01T00: 00: 00 вызовет исключение вне диапазона.
По всей вероятности, ваш DateTime
значение почему-то не инициализируется, или DateTime.ParseExact() получает передаваемые ненужные данные, успешно анализирует их и сворачивает с датой / временем до 1753-01-01.