从DB查询DateTime字段时,我可以控制DateTimeKind吗?

时间:2017-04-05 09:53:18

标签: c# sql-server datetime dapper

当我从C#查询涉及DateTime字段的SqlServer数据库时,返回的System.DateTimeKind==Unspecified,这并不奇怪,因为SqlServer DateTime类型不保留时区信息。< / p>

我想知道是否有办法自动将这些值读取为本地或通用,而不是在读取查询结果后手动转换它们,这会在错过字段时引入更多错误的可能性。

典型代码如下:

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

1 个答案:

答案 0 :(得分:4)

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");