How could we handle null for a datetime field (got from SQL Server) in our program in c#?
2 Answers
There are 3 common approaches here;
- if you are talking about
object(perhaps as you fetch it from a data-reader), thenDBNull.Valuecan represent null. I don't tend to let this out of the data-layer, though - due to .NET 1.1 history,
DateTime.MinValueis commonly interpreted asnull; a magic number, maybe - but it works and is supported by most data-binding etc - in .NET 2.0,
Nullable<T>means you can useDateTime?- i.e. a nullable-of-DateTime; just useDateTime?where-ever you mean aDateTimethat can be null, and you can give it a value ofnullor a validDateTime.
Some other thoughts on data-access and nulls:
- when passing to a
SqlCommandyou must useDBNull.Value, notnull- see below - when reading from a data-reader, I tend to check
reader.IsDbNull(ordinal)
command stuff (with Nullable<T> as the example):
param.Value = when.HasValue ? (object)when.Value : DBNull.Value;
Comments
Use DateTime?
What problem are you having, specifically?
-- Edit
Just so it's clear, that's a Nullable DateTime object, not a question :)
DateTime? t = null;
-- Edit
Responding to comment, check it like so:
DateTime? theTime;
if( table["TheColumn"] == DBNull.Value ){
theTime = null;
} else {
theTime = (DateTime) table["TheColumn"];
}
3 Comments
odiseh
I can not cast object (a column of DataRow) to DateTime .
Noon Silk
Responded via edit. You just need to check if it is equal to
DBNull.Value.Noon Silk
Okay ... You may like to post how you've solved it and mark it as accepted, so it helps anyone else who searches.