Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 22966|Ответ: 1

[Источник] spring.net nhibernate sqldatetime overflow solution

[Скопировать ссылку]
Опубликовано 13.09.2017 14:34:58 | | | |
Переполнение SqlDateTime. Должно быть между 1/01/1753 и 12:00:00 ночи и 31.12.9999 23:59




При выполнении операции обновления с сайта я постоянно получал ошибку, и думал, что проблема в конфигурации XML или что-то пошло не так при выполнении SQL-оператора

Я попробовал использовать SQL query analyzer, чтобы получить сгенерированные SQL-операторы, и понял, в чём проблема с правильным выполнением? SQL-оператор выглядит следующим образом:

Исполнительный sp_executesql N'INSERT В DBO. LeanLogs (Version, OrganizationId, CustomInfoId, LastLeanAlarmType, nowLeanAlarmType, InsertTime, TreatedTime) ЗНАЧЕНИЯ (@p0, @p1, @p2, @p3, @p4, @p5, @p6); выберите SCOPE_IDENTITY()',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 datetime,@p6 datetime',@p0=1,@p1=35,@p2=12,@p3=10,@p4=10,@p5='2017-09-13 13:09:41',@p6=NULL
Переполнение SqlDateTime. Разрешение должно быть --- между 1/01/1753 00:00 и 31.12.9999 23:59:59

Причина ошибки

    Если значение временного типа, переданного в базу данных, равно NULL, или при вставке или обновлении базы данных для DateTime.MinValue, значение поля datetime по умолчанию является null.
    NULL здесь означает null в программном коде, и большинство сценариев, где это происходит, таковы: в программе определяется переменная временного типа, которая передаётся в базу данных (или сохранённую процедуру) без присвоения значения. В данный момент значение этой переменной по умолчанию присваивается 01/01/01.
     Поскольку поле типа DateTime в базе данных минимальное значение составляет 1/1/1753 12:00:00, тогда как . NET Framework, тип DateTime, минимальное значение — 1/1/0001 0:00:00, очевидно, оно выходит за пределы минимального диапазона значения sql, что приводит к ошибке переполнения данных.
    Давайте посмотрим, как увидеть .net и sql max min time через C#:


Эффект выхода:



В итоге её дорабатывали более десяти минут,

Окончательные причины ошибок следующие:

Один из типов атрибутов объекта также является объектом, то есть таблица имеет внешний ключ, а в таблицу внешних ключей добавляется новый атрибут datetime, которому не присваивается значение и не устанавливается в нулевый тип

При добавлении или обновлении объекта дата времени внешнего ключа автоматически прикрепляется к значению по умолчанию, поскольку время значения .net по умолчанию меньше минимального времени базы данных

Решение: установите свойство типа datetime объекта внешнего ключа на nullable тип, помогите коллегам идеально решить проблему!







Предыдущий:.NET/C# Операция Redis Cache Addition, Delement, Modification and Query [исходный код]
Следующий:asp.net Анализ ошибок аномалий сайта
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com