Переполнение 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 тип, помогите коллегам идеально решить проблему!
|