.net DateTime MaxValue отличается, как только он хранится в базе данных - PullRequest
25 голосов
/ 25 мая 2011

Когда я сохраняю свойство date со значением DateTime.MaxValue в базе данных и извлекаю его обратно, сохраненное значение не равно DateTime.MaxValue.Свойства галочки отключены.Почему это?

Используя MS SQL, тип данных для поля даты - «datetime»

enter image description here

Ответы [ 5 ]

25 голосов
/ 25 мая 2011

Поскольку у даты и времени в SQL разрешение меньше.

Тип данных DateTime в MS SQL представляет данные о дате и времени с 1 января 1753 года по 31 декабря 9999 года с точностью до трех.сотая секунда или 3,33 миллисекунды.Значения округляются до приращений .000, .003 или .007 миллисекунд.

source

Тип значения DateTime в .Net представляетдаты и время с 12:00:00 до полуночи, 1 января, 0001 г. Анно Домини (общее время) по 23:59:59, 31 декабря 9999 г. н.э. (CE). Значения времени измеряются в единицах по 100 наносекунд, называемых тиками.

источник

3 голосов
/ 25 мая 2011

Это вполне может быть причиной того, что .NET DateTime напрямую не переводится в тип SQL DateTime.

Я бы установил значение, а затем проверил отметки по SqlDateTime.MaxValue.

1 голос
/ 25 мая 2011

Должен признать, я не уверен в этом, но это может быть связано с точностью даты и времени?

Выполнение быстрого поиска здесь - статья о Точность и точность DateTime

Также, возможно, существует несоответствие между точностью даты и времени в c # против sql?

0 голосов
/ 25 мая 2011

MS SQL Server делает некоторые странные вещи с датами на самом низком уровне. Например, рассмотрим следующий скрипт:

select
    test1 = dateadd(ms,-1,convert(datetime,'20110504')),
    test2 = dateadd(ms,-2,convert(datetime,'20110504')),
    test3 = dateadd(ms,-3,convert(datetime,'20110504')),
    test4 = dateadd(ms,-4,convert(datetime,'20110504')),
    test5 = dateadd(ms,-5,convert(datetime,'20110504')),
    test6 = dateadd(ms,-6,convert(datetime,'20110504'))

Возвращает:

test1                   test2                   test3                   test4                   test5                   test6
----------------------- ----------------------- ----------------------- ----------------------- ----------------------- -----------------------
2011-05-04 00:00:00.000 2011-05-03 23:59:59.997 2011-05-03 23:59:59.997 2011-05-03 23:59:59.997 2011-05-03 23:59:59.993 2011-05-03 23:59:59.993

Как вы можете видеть, MS SQL имеет дело только с миллисекундами с точностью до 3. Если вы перейдете между ними, они округляются. Возможно, это то, что происходит, когда DateTime.MaxValue хранится в SQL.

0 голосов
/ 25 мая 2011

Какого типа поле данных, в котором вы храните это значение?

Возможно, максимальное значение для .NET DateTime превышает емкость для эквивалентного типа данных в базе данныхдвигатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...