sql >> Database >  >> RDS >> Sqlserver

Nullable DateTime uit de database halen

Een SQL null is niet hetzelfde als een .NET null; je moet vergelijken met System.DBNull.Value:

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

In antwoord op uw opmerking, het gegevenstype van het Item eigenschap van een DataReader is die van het onderliggende databasetype. Het kan System.Data.SqlTypes.SqlDateTime zijn voor een niet-null SQL Server-database, of System.DBNull voor een null-kolom, of System.Data.Odbc.OdbcTypes.SmallDateTime voor een ODBC-database, of eigenlijk zo ongeveer alles. Het enige waarop u kunt vertrouwen, is dat het van het type object is .

Dit is ook de reden waarom ik voorstel om Convert.ToDateTime() te gebruiken in plaats van dwang te typen op DateTime . Er is geen garantie dat een ODBC of welke datumkolom dan ook kan worden gedwongen tot een .NET DateTime . Ik merk op dat uw opmerking een "sqldatareader" specificeert en een SQL Server System.Data.SqlTypes.SqlDateTime kan inderdaad worden gedwongen tot een System.DateTime , maar uw oorspronkelijke vraag heeft ons dat niet verteld.

Voor meer informatie over het gebruik van DataReader s, raadpleeg MSDN.



  1. 7 belangrijke dingen om te onthouden over globalisering van datamodellen

  2. 3 SQL Server-bewakingsvragen die u moet stellen bij het overnemen van een DBA-positie

  3. SQL Server-afstemming - het draait allemaal om meten

  4. Cumulatieve som over een reeks rijen in mysql