SqlDateTime 오버플로우. 1753년 1월 1일 오전 12:00:00부터 9999년 12월 31일 오후 11:59:59 사이여야 합니다
웹사이트에서 업데이트 작업을 수행할 때 계속 오류가 발생했고, XML 설정이나 SQL 문이 실행될 때 문제가 생긴 줄 알았습니다
SQL 쿼리 분석기를 사용해 생성된 SQL 문장을 가져와보려 했는데, 올바른 실행에 무슨 문제가 있는지 알게 되었습니다. SQL 문장은 다음과 같습니다:
임원sp_executesql dbo에 삽입. LeanLogs (버전, 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 오버플로우. 해결책은 1753년 1월 1일 오전 12:00:00부터 12/31/999 오후 11:59:59 사이에 ---되어야 합니다
오류 원인
데이터베이스에 전달되는 시간 타입의 값이 NULL이거나, DateTime.MinValue를 삽입하거나 업데이트할 때 datetime 필드 값은 기본적으로 null입니다. 여기서 NULL은 프로그램 코드 내의 null을 의미하며, 이런 경우가 대부분 다음과 같습니다: 시간에 타입 변수가 정의되어 있고, 값을 할당하지 않고 데이터베이스(또는 저장 프로시저)에 전달됩니다. 이 시점에서 이 변수의 값은 기본적으로 01/01/01로 할당됩니다. 데이터베이스의 DateTime 타입 필드 때문에 최소 값은 1/1/1/1753 12:00:00이며, . NET 프레임워크의 DateTime 타입은 최소 값이 1/1/0001 0:00:00이며, 이는 SQL 값의 최소 값 범위를 벗어나 있어 데이터 오버플로우 오류가 발생합니다. C#을 통해 .net과 SQL 최소 사용 시간을 확인하는 방법을 살펴보겠습니다:
출력 효과:
결국 10분 넘게 손봤다,
최종 오류 원인은 다음과 같습니다:
객체의 속성 유형 중 하나는 객체이기도 한데, 즉 테이블에 외래 키가 있고, 값이 할당되지 않고 nullable 타입으로 설정되지 않은 새로운 datetime 속성이 외래키 테이블에 추가됩니다
객체를 추가하거나 업데이트할 때, .net 기본값의 시간이 데이터베이스의 기본 최소 시간보다 짧기 때문에 외래키 객체의 datetime이 자동으로 기본값에 부착됩니다
해결책: 외래키 객체의 datetime 타입 속성을 nullable type으로 설정해 동료들이 완벽하게 해결할 수 있도록 도와주세요!
|