sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man får nullbar DateTime ur databasen

En SQL-null är inte detsamma som en .NET-null; du måste jämföra med System.DBNull.Value:

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

Som svar på din kommentar, datatypen för Item egenskapen för en DataReader är den av den underliggande databastypen. Det kan vara System.Data.SqlTypes.SqlDateTime för en SQL Server-databas som inte är null, eller System.DBNull för en nollkolumn eller System.Data.Odbc.OdbcTypes.SmallDateTime för en ODBC-databas, eller egentligen precis vad som helst. Det enda du kan lita på är att det är av typen object .

Det är också därför jag föreslår att du använder Convert.ToDateTime() istället för att skriva tvång till DateTime . Det finns ingen garanti för att en ODBC eller vilken datumkolumn som helst kan tvingas till en .NET DateTime . Jag noterar att din kommentar anger en "sqldatareader" och en SQL Server System.Data.SqlTypes.SqlDateTime kan verkligen tvingas till en System.DateTime , men din ursprungliga fråga berättade inte för oss det.

För mer information om hur du använder DataReader s, konsultera MSDN.



  1. Kör PostgreSQL-frågor från kommandoraden

  2. Hur visar jag det fullständiga innehållet i en text- eller varchar(MAX)-kolumn i SQL Server 2008 Management Studio?

  3. MySQL> Tabell finns inte. Men det gör det (eller det borde det)

  4. Det går inte att ansluta till Postgres via PHP men kan ansluta från kommandoraden och PgAdmin på annan maskin