Переповнення SqlDateTime. Має бути між 1/01/1753 та 12:00:00 та 31.12.9999 23:59: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); select 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 12: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 тип, допоможіть колегам ідеально її розв'язати!
|