当我从 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/