数据库中的 NULL 值与日期时间属性之间的冲突
本文关键字:时间 属性 之间 日期 冲突 NULL 数据库 | 更新日期: 2023-09-27 18:36:54
我有一个类,其中有一个名为myDateTime
的字段键入为可为空的DateTime
,这些是访问器方法:
System.DateTime? _MyDateTime;
public System.DateTime? MyDateTime {get; set;}
在我的代码中的其他地方,我需要使用myColumn
内写入的数据来评估MyDateTime
属性。
MyDateTime = Convert.ToDateTime(myReader["myColumn"]);
myColumn
的值可以是 NULL
或 DateTime
。唉,如果myColumn
是 NULL,这段代码会产生错误,因为我无法转换 NULL 值。此外,我不能写:
MyDateTime = System.DBNull.Value;
所以我不知道如果该字段中存在NULL
值,我该如何处理这个问题。我将避免使用简单的对象来存储数据,并且我会保留一种属性类型。
您需要从 DBNull.Value
转换为 DateTime?
的空值。为此在DbDataReader
上编写扩展方法可能是最简单的:
public static DateTime? GetNullableDateTime(this DbDataReader reader,
string column)
{
object value = reader[column];
return value == DBNull.Value ? (DateTime?) null : (DateTime) value;
}
然后将其用作:
MyDateTime = myReader.GetNullableDateTime("myColumn");
请注意,我使用的是强制转换而不是Convert.ToDateTime
- 如果您真的想自动从字符串转换为DateTime
值等,您可以使用后者,但我更喜欢更明确地说明这种事情。(这是架构可能不合适的迹象...
你可以按如下方式使用 Tryparse
...System.DateTime? _MyDateTime;
public System.DateTime? MyDateTime {get; set;}
if (DateTime.TryParse(myReader["myColumn"], out MyDateTime ))
{
//do stuffs if value is parsed successfully
}
else
{
}