My SQL Server database contains nullable DateTime values. How can I convert them to a nullable DateTime object in my application in C#?
This is what I would think it would look like, but it doesn't:
DateTime? dt = (DateTime?) sqldatareader[0];
A SQL null is not the same as a .NET null; you have to compare against System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
In answer to your comment, the data type of the Item
property of a DataReader
is that of the underlying database type. It could be System.Data.SqlTypes.SqlDateTime
for a non-null SQL Server database, or System.DBNull
for a null column, or System.Data.Odbc.OdbcTypes.SmallDateTime
for an ODBC database, or really just about anything. The only thing you can rely on is that it is of type object
.
This is also why I suggest using Convert.ToDateTime()
instead of type coercion to DateTime
. There is no guarantee a ODBC or whatever date column can be coerced to a .NET DateTime
. I note your comment specifies a "sqldatareader", and a SQL Server System.Data.SqlTypes.SqlDateTime
can indeed be coerced to a System.DateTime
, but your original question did not tell us that.
For more information on using DataReader
s, consult MSDN.