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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…