Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere DateTime nullable dal database

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.