I have a class with a field named myDateTime typed as nullable DateTime, these are the accessor methods:

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

Somewhere else in my code I need to value MyDateTime attribute with the data write inside myColumn.

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

The value from myColumn can be NULL or DateTime. Alas if myColumn is NULL this code produce an error cause I can't convert a NULL value. Further, I can't write:

MyDateTime = System.DBNull.Value;

So I don't know how I could handle this issue if NULL value is present in that field. I would avoid the use of a simple object to store the data and I would preserve a sort of attributes typing.

有帮助吗?

解决方案

You need to convert from DBNull.Value to the null value of DateTime?. It may be simplest to write an extension method on DbDataReader for that:

public static DateTime? GetNullableDateTime(this DbDataReader reader,
                                            string column)
{
    object value = reader[column];
    return value == DBNull.Value ? (DateTime?) null : (DateTime) value;
}

Then use it as:

MyDateTime = myReader.GetNullableDateTime("myColumn");

Note that I'm using a cast rather than Convert.ToDateTime - you could use the latter if you really want to automatically convert from strings to DateTime values etc, but I prefer to be a bit more explicit about that sort of thing. (It's a sign of the schema probably being inappropriate...)

其他提示

You can use Tryparse as following...

System.DateTime? _MyDateTime;
public System.DateTime? MyDateTime {get; set;}
        if (DateTime.TryParse(myReader["myColumn"], out MyDateTime ))
        {
            //do stuffs if value is parsed successfully
        }
        else
        {

        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top