数据库中的 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的值可以是 NULLDateTime 。唉,如果myColumn是 NULL,这段代码会产生错误,因为我无法转换 NULL 值。此外,我不能写:

MyDateTime = System.DBNull.Value;

所以我不知道如果该字段中存在NULL值,我该如何处理这个问题。我将避免使用简单的对象来存储数据,并且我会保留一种属性类型。

数据库中的 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
        {
        }