Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment extraire DateTime nullable de la base de données

Un null SQL n'est pas identique à un null .NET; vous devez comparer avec System.DBNull.Value :

object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
    ? (DateTime?)null
    : Convert.ToDateTime(sqlDateTime);

En réponse à votre commentaire, le type de données de l'Item propriété d'un DataReader est celui du type de base de données sous-jacent. Cela pourrait être System.Data.SqlTypes.SqlDateTime pour une base de données SQL Server non nulle, ou System.DBNull pour une colonne nulle, ou System.Data.Odbc.OdbcTypes.SmallDateTime pour une base de données ODBC, ou vraiment à peu près n'importe quoi. La seule chose sur laquelle vous pouvez compter est qu'il est de type object .

C'est aussi pourquoi je suggère d'utiliser Convert.ToDateTime() au lieu de taper la coercition sur DateTime . Il n'y a aucune garantie qu'une colonne ODBC ou toute autre colonne de date puisse être convertie en un DateTime .NET . Je note que votre commentaire spécifie un "sqldatareader" et un SQL Server System.Data.SqlTypes.SqlDateTime peut en effet être contraint à un System.DateTime , mais votre question initiale ne nous le disait pas.

Pour plus d'informations sur l'utilisation de DataReader s, consultez MSDN.