c# - 从数据库查询 DateTime 字段时,我可以控制 DateTimeKind 吗?

标签 c# sql-server datetime dapper

当我从 C# 查询涉及 DateTime 字段的 SqlServer 数据库时,返回的 System.DateTime 具有 Kind==Unspecified,这不足为奇因为 SqlServer DateTime 类型不保留任何时区信息。

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

典型的代码如下:

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

由于它不会持久保存在数据库中,因此您必须在自己的代码中检索时指定它,尽管您可以创建扩展方法,但 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");

关于c# - 从数据库查询 DateTime 字段时,我可以控制 DateTimeKind 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43227738/

相关文章:

c# - 为 Razor 中的复选框设置标签

c# - 调用使用 yield 返回的方法时出现错误 'Iterator cannot contain return statement '

c# - 控制按钮启用属性的复选框 - ASP.NET

在apache下连接到mssql时PHP超时

c# - DateTime.ToString() 不能按预期使用斜杠作为日期分隔符

c# - 通过使用 C# 和 HttpClient 调用 REST API 来检索 JSON 内容

sql-server - 如果 SQL Server 中的事务失败,触发器是否会回滚?

java - 如何将时间戳插入 SQLite 数据库列?使用函数时间 ('now' )?

python Pandas : What is the fastest way to create a datetime index?

sql-server - SQL Server调整顾问报告