SQL null не е същото като .NET null; трябва да сравните със System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
В отговор на вашия коментар, типът данни на Item свойство на DataReader е този на основния тип база данни. Може да е System.Data.SqlTypes.SqlDateTime за ненулева база данни на SQL Server или System.DBNull за нулева колона или System.Data.Odbc.OdbcTypes.SmallDateTime за ODBC база данни или наистина почти всичко. Единственото нещо, на което можете да разчитате, е, че е от тип object .
Ето защо предлагам да използвате Convert.ToDateTime() вместо тип принуда към DateTime . Няма гаранция, че ODBC или каквато и да е колона за дата може да бъде принудена към .NET DateTime . Отбелязвам, че вашият коментар посочва "sqldatareader" и SQL Server System.Data.SqlTypes.SqlDateTime наистина може да бъде принуден към System.DateTime , но първоначалният ви въпрос не ни каза това.
За повече информация относно използването на DataReader s, консултирайте се с MSDN.