Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obter DateTime anulável do banco de dados


Um nulo SQL não é o mesmo que um nulo .NET; você tem que comparar com System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
    ? (DateTime?)null
    : Convert.ToDateTime(sqlDateTime);

Em resposta ao seu comentário, o tipo de dados do Item propriedade de um DataReader é a do tipo de banco de dados subjacente. Pode ser System.Data.SqlTypes.SqlDateTime para um banco de dados SQL Server não nulo ou System.DBNull para uma coluna nula ou System.Data.Odbc.OdbcTypes.SmallDateTime para um banco de dados ODBC, ou praticamente qualquer coisa. A única coisa que você pode confiar é que é do tipo object .

É também por isso que sugiro usar Convert.ToDateTime() em vez de digitar coerção para DateTime . Não há garantia de que um ODBC ou qualquer coluna de data possa ser forçada a um .NET DateTime . Observo que seu comentário especifica um "sqldatareader" e um SQL Server System.Data.SqlTypes.SqlDateTime pode realmente ser forçado a um System.DateTime , mas sua pergunta original não nos dizia isso.

Para obter mais informações sobre como usar o DataReader s, consulte o MSDN.