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.