Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erhalten Sie nullable DateTime aus der Datenbank

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.