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.