0

我有一个名为myDateTimetyped as nullable DateTime的字段的类,这些是访问器方法:

System.DateTime? _MyDateTime;
public System.DateTime? MyDateTime {get; set;}

在我的代码中的其他地方,我需要MyDateTime使用写入的数据来评估属性myColumn

MyDateTime = Convert.ToDateTime(myReader["myColumn"]);

from 的值myColumn可以是NULLDateTime。唉,如果myColumn是 NULL,此代码会产生错误,因为我无法转换 NULL 值。此外,我不能写:

MyDateTime = System.DBNull.Value;

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

4

2 回答 2

2

您需要从 转换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值等,您可以使用后者,但我更愿意对这类事情更明确一点。(这表明架构可能不合适......)

于 2013-10-26T13:52:50.607 回答
0

您可以使用 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
        {

        }
于 2013-10-26T13:56:41.807 回答