DB에서 DateTime 필드를 쿼리 할 때 DateTimeKind를 제어 할 수 있습니까?

c# dapper datetime sql-server

문제

DateTime 필드가 포함 된 C #에서 SqlServer 데이터베이스를 쿼리 할 때 반환 된 System.DateTime 에는 SqlServer DateTime 형식의 시간대 정보가 유지되지 않으므로 Kind==Unspecified 가 있습니다.

필자는 쿼리 결과를 읽은 후 수동으로 변환하지 않고 이러한 값을 로컬 또는 범용으로 자동 읽는 방법이 있는지 궁금해했습니다. 이로 인해 필드를 놓친 경우 실수가 발생할 가능성이 더 커졌습니다.

일반적인 코드는 다음과 같습니다.

    using (var conn = ...)
    using (var command = ...)
    {
        conn.Open();
        var reader = command.ExecuteReader();
        while (reader.Read())
        {
          DateTime dateField =  (DateTime)reader["date"];
          //dateField.Kind == Unspecified
        }
    }

인기 답변

DateTime dateField = DateTime.SpecifyKind((DateTime)reader["date"], DateTimeKind.Utc);

데이터베이스에 유지되지 않으므로 코드에서 검색 할 때 데이터베이스에 지정해야하므로 Extension 메서드를 만들 수는 있지만 DataReader에는 바로 가기 메서드가 없습니다.

public static class Helper{
    public static DateTime GetDateTimeAsUtc(this IDataReader reader, string column){
        return DateTime.SpecifyKind((DateTime)reader[column], DateTimeKind.Utc);
    }
}

그런 다음 전화해라.

DateTime dateField = reader.GetDateTimeAsUtc("date");


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.