Eine SQL-Null ist nicht dasselbe wie eine .NET-Null; Sie müssen mit System.DBNull.Value vergleichen:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
Als Antwort auf Ihren Kommentar, den Datentyp des Item
Eigenschaft eines DataReader
ist die des zugrunde liegenden Datenbanktyps. Dies könnte System.Data.SqlTypes.SqlDateTime
sein für eine Nicht-Null-SQL Server-Datenbank oder System.DBNull
für eine Nullspalte oder System.Data.Odbc.OdbcTypes.SmallDateTime
für eine ODBC-Datenbank oder wirklich so ziemlich alles. Das Einzige, worauf Sie sich verlassen können, ist, dass es vom Typ object
ist .
Aus diesem Grund empfehle ich auch die Verwendung von Convert.ToDateTime()
statt Typzwang zu DateTime
. Es gibt keine Garantie dafür, dass eine ODBC- oder andere Datumsspalte in eine .NET DateTime
umgewandelt werden kann . Ich stelle fest, dass Ihr Kommentar einen "sqldatareader" und einen SQL Server System.Data.SqlTypes.SqlDateTime
angibt kann tatsächlich zu einem System.DateTime
gezwungen werden , aber Ihre ursprüngliche Frage hat uns das nicht gesagt.
Weitere Informationen zur Verwendung von DataReader
s, wenden Sie sich an MSDN.