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.