Null SQL tidak sama dengan .NET null; anda harus membandingkan dengan System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
Sebagai jawaban atas komentar Anda, tipe data Item properti dari DataReader adalah tipe database yang mendasarinya. Bisa jadi System.Data.SqlTypes.SqlDateTime untuk database SQL Server non-null, atau System.DBNull untuk kolom nol, atau System.Data.Odbc.OdbcTypes.SmallDateTime untuk database ODBC, atau benar-benar apa saja. Satu-satunya hal yang dapat Anda andalkan adalah tipe object .
Ini juga mengapa saya menyarankan menggunakan Convert.ToDateTime() alih-alih mengetik paksaan ke DateTime . Tidak ada jaminan ODBC atau kolom tanggal apa pun dapat dipaksa ke .NET DateTime . Saya perhatikan komentar Anda menentukan "sqldatareader", dan SQL Server System.Data.SqlTypes.SqlDateTime memang bisa dipaksa ke System.DateTime , tetapi pertanyaan awal Anda tidak memberi tahu kami hal itu.
Untuk informasi lebih lanjut tentang menggunakan DataReader s, konsultasikan dengan MSDN.