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.