Wartość null SQL nie jest taka sama jak wartość null platformy .NET; musisz porównać z System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
W odpowiedzi na Twój komentarz, typ danych Item
właściwość DataReader
jest typem bazowej bazy danych. Może to być System.Data.SqlTypes.SqlDateTime
dla bazy danych SQL Server innej niż null lub System.DBNull
dla kolumny o wartości null lub System.Data.Odbc.OdbcTypes.SmallDateTime
dla bazy danych ODBC, a właściwie czegokolwiek. Jedyną rzeczą, na której możesz polegać, jest to, że jest typu object
.
Dlatego też sugeruję użycie Convert.ToDateTime()
zamiast wpisywać przymus na DateTime
. Nie ma gwarancji, że ODBC lub jakakolwiek kolumna daty może zostać przekonwertowana na DateTime
platformy .NET . Zauważyłem, że twój komentarz określa "sqldatareader" i SQL Server System.Data.SqlTypes.SqlDateTime
rzeczywiście może być zmuszona do System.DateTime
, ale Twoje pierwotne pytanie nam tego nie mówiło.
Aby uzyskać więcej informacji na temat korzystania z DataReader
s, skonsultuj się z MSDN.