DB中的NULL值与DateTime属性之间的冲突

时间:2013-10-26 13:45:14

标签: c# datetime nullable

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

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

我的代码中的其他地方我需要使用MyDateTime内的数据写入myColumn属性值。

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

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

MyDateTime = System.DBNull.Value;

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

2 个答案:

答案 0 :(得分: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值等,你可以使用后者,但我更喜欢多一点关于那种事情的明确。 (这是模式可能不合适的标志......)

答案 1 :(得分: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
        {

        }