Un null SQL non è lo stesso di un null .NET; devi confrontare con System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
In risposta al tuo commento, il tipo di dati dell'Item
proprietà di un DataReader
è quello del tipo di database sottostante. Potrebbe essere System.Data.SqlTypes.SqlDateTime
per un database SQL Server non nullo o System.DBNull
per una colonna nulla o System.Data.Odbc.OdbcTypes.SmallDateTime
per un database ODBC o per qualsiasi cosa. L'unica cosa su cui puoi fare affidamento è che è di tipo object
.
Questo è anche il motivo per cui suggerisco di utilizzare Convert.ToDateTime()
invece di digitare coercizione su DateTime
. Non vi è alcuna garanzia che una colonna ODBC o qualsiasi altra colonna di data possa essere forzata a un DateTime
.NET . Prendo atto che il tuo commento specifica un "sqldatareader" e un System.Data.SqlTypes.SqlDateTime
di SQL Server può infatti essere forzato a un System.DateTime
, ma la tua domanda originale non ce lo diceva.
Per ulteriori informazioni sull'utilizzo di DataReader
s, consultare MSDN.