SmallDateTime 시간 범위 검사

1505 단어 DateTime
SamllDataTime 은 SQL Server 의 표현 시간 유형 으로 정밀도 가 높 지 않 지만 공간 을 절약 합 니 다. 구체 적 인 세부 사항 은 MSDN 문 서 를 보십시오.
여기 서 그것 의 시간 범 위 를 중점적으로 살 펴 보 자. 1900 - 01 - 01 부터 2079 - 06 - 06 까지.
먼저 시스템 의 코드 를 보 여 주세요. 그 중의 문 제 를 발견 할 수 있 습 니까?
SqlCommand command = new SqlCommand(sqlTemplate, conn);
//....
command.Parameters.Add(new SqlParameter("@LogClientTime", SqlDbType.SmallDate;
command.Parameters.Add(new SqlParameter("@LogServerTime", SqlDbType.SmallDate;
//....
foreach (var hourlySummaryData in _summaryData)
{
    //....
    command.Parameters["@LogClientTime"].Value = 
    hourlySummaryData.LogClientTime < SqlDateTime.MinValue ? SqlDateTime.MinValue : hourlySumma.Value.LogClientTime;
    command.Parameters["@LogServerTime"].Value = 
    hourlySummaryData.LogServerTime < SqlDateTime.MinValue ? SqlDateTime.MinValue : hourlySumma.Value.LogServerTime;
    //....
    command.ExecuteNonQuery();
}

 
시스템 의 시간 이 hourly Summary Data. LogClient Time 의 상한 선 을 검사 하지 않 았 습 니 다. bug 입 니 다. 하지만 이것 은 제 가 말 하고 싶 은 것 이 아니 라 bug 가 있 습 니 다.
SqlDateTime. MinValue 의 값 은 1753 / 1 / 1 0: 00: 00 입 니 다. 문제 가 어디 에 있 는 지 아 시 죠? 
. NET BCL 에는 1900 / 1 / 1 (SqlDateTime 의 SQLBaseDate 필드 와 같은 개인 적 인 필드 가 없습니다.)
따라서 사용 할 때 반드시 주의해 야 합 니 다. 만약 데이터베이스 에 SmallDateTime 을 사용 했다 면 범위 검 사 는 반드시 스스로 손 으로 써 야 합 니 다. SqlDateTime. MinValue 와 MaxValue 는 SmallDateTime 에 사용 되 는 것 이 아니 라 datetime 의 범위 검사 (1753 년 1 월 1 일부 터 9999 년 12 월 31 일 까지) 입 니 다.

좋은 웹페이지 즐겨찾기