Pregunta

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.

¿Fue útil?

Solución

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...)

Otros consejos

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
        {

        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top