En SQL-nul er ikke det samme som en .NET-nul; du skal sammenligne 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 for Item egenskab for en DataReader er den af den underliggende databasetype. Det kunne være System.Data.SqlTypes.SqlDateTime for en ikke-nul SQL Server-database eller System.DBNull for en nulkolonne eller System.Data.Odbc.OdbcTypes.SmallDateTime for en ODBC-database, eller egentlig næsten hvad som helst. Det eneste du kan stole på er, at det er af typen object .
Det er også derfor, jeg foreslår at bruge Convert.ToDateTime() i stedet for at skrive tvang til DateTime . Der er ingen garanti for, at en ODBC eller en hvilken som helst datokolonne kan tvinges til en .NET DateTime . Jeg bemærker, at din kommentar specificerer en "sqldatareader" og en SQL Server System.Data.SqlTypes.SqlDateTime kan faktisk tvinges til en System.DateTime , men dit oprindelige spørgsmål fortalte os det ikke.
For mere information om brug af DataReader s, konsulter MSDN.