2012-05-08 3 views
4

SqlException : datetime2 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어난 값이 반환됩니다."SqlException : datetime2 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 값이 발생했습니다."문제를 해결하는 방법

내 코드는 다음과 같다 :

 using (var contxt = new realtydbEntities()) 
     { 
      var status = GetStatus(); 

      var repIssue = new RepairIssue() 
      { 
       CreaterId = AuthorId, 
       RepairItemDesc = this.txtDescription.Text, 
       CreateDate = DateTime.Now,//here's the problem 
       RepairIssueStatu = status 
      }; 

      contxt.AddObject("RepairIssues", repIssue); 
      contxt.SaveChanges(); 
     } 

유형 smalldatetime으로있는 컬럼에 CreateDate 속성 매핑.

이 코드를 실행하는 방법은 무엇입니까?

+0

[datetime2 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어 납니까?] (https://stackoverflow.com/questions/7386360/the-conversion-of-a-) –

답변

2

문제의 근본 원인은 C# DateTime 개체가 SQL의 smalldatetime 형식보다 "더 크다"입니다. 다음은 차이의 좋은 개요는 다음과 같습니다 http://www.karaszi.com/SQLServer/info_datetime.asp

그래서 정말 옵션은 다음과 같습니다

  1. 변경 열 날짜에 smalldatetime으로의 유형 (또는 DATETIME2) EF를 사용하는 대신
  2. , 자신의 SQL 명령을 구성 (그리고 당신은 SqlDateTime을 사용할 수 있습니다)
+3

이것은 왜 'DateTime.Now will'이 SmallDateTime에 맞지 않는지 설명하지 않습니다. 크기 만큼은 아니지만 저장할 수있는 범위와 정밀도/정확도에 관한 것입니다. 'DateTime.Now'는 항상 SmallDateTime 필드에 유효한 값이어야합니다 (PC 클럭을 300 년으로 설정하지 않은 경우). 그러나 현재 'DateTime.Now'값을 저장하는 동안 정확히 같은 오류가 발생합니다. 04/10/2013 12:49:00}을 SQL SmallDateTime 필드에 추가합니다. 내가 어디에서라도 정확한 답을 찾을 수 없다는 것은 실망 스럽다. –

+0

@TrueBlueAussie 변환에서 정보가 손실 될 수 있으므로 "더 큰"유형에서 "더 작은"유형으로 자동 변환 할 수 없습니다. 이것은 "더 큰"이 "더 큰 숫자를 담을 수 있음"을 의미하든, "더 많은 정밀도를 유지할 수 있는가"를 의미하든간에 똑같이 적용됩니다. C#에서는 이러한 분수 초가 중요하다고 가정합니다 (예 : 명시 적 캐스트와 같이). – GrandOpener

+0

@ GrandOpener : 내 의견을 잘못 이해해서 죄송합니다.간단히 말해서 * 왜 dateTime.Now가 SmallDateTime *에 맞지 않는지에 대한 해답을 설명해야했습니다. 나는 설명을 요구하지 않고 있었다 :) –

1

SqlDateTime을 사용하면 필요한 것을 할 수 있습니다.

+0

당신이 제안한 것처럼'DateTime'에서'SqlDateTime'을 생성한다면, EF를 위해'Value'를 사용하십시오. 업데이트 (EF 속성은 DateTime이므로)이 오류가있는 경우에도 정확히 동일한 오류가 발생합니다. 이 대답은 이것이 어떻게 문제를 해결하는지 명확히하지 않는 한 EF (질문이있는)에 대해 부정확하게 나타납니다. –

5

동일한 예외가 있었지만 Null 값을 허용하지 않는 datetime 속성이 최소 datetime 값을 사용했기 때문입니다. DB에서 smalldatetime이 아니지만 C#의 최소 datetime은 SQL의 최소 datetime의 한계를 초과합니다. 솔루션은 분명했습니다. datetime을 올바르게 설정하십시오. 사실은 코드가 내 것이 아니기 때문에 그 속성을 알지 못했습니다.

0

이전 데이터를 제거하지 않고 SQL 테이블과 응용 프로그램에 datetime 열을 추가했기 때문에이 오류가 발생했습니다. 나는 새로운 기록을 갱신 할 수 있다는 것을 알았다. 그러나 추가 필드 이전의 테이블에 있던 레코드는 그 중 하나에서 업데이트가 시도 될 때이 오류를 던졌습니다.

관련 문제