En SQL-nul er ikke det samme som en .NET-nul; du skal sammenligne med System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
Som svar på din kommentar, datatypen for Item
egenskab for en DataReader
er den af den underliggende databasetype. Det kunne være System.Data.SqlTypes.SqlDateTime
for en ikke-nul SQL Server-database eller System.DBNull
for en nulkolonne eller System.Data.Odbc.OdbcTypes.SmallDateTime
for en ODBC-database, eller egentlig næsten hvad som helst. Det eneste du kan stole på er, at det er af typen object
.
Det er også derfor, jeg foreslår at bruge Convert.ToDateTime()
i stedet for at skrive tvang til DateTime
. Der er ingen garanti for, at en ODBC eller en hvilken som helst datokolonne kan tvinges til en .NET DateTime
. Jeg bemærker, at din kommentar specificerer en "sqldatareader" og en SQL Server System.Data.SqlTypes.SqlDateTime
kan faktisk tvinges til en System.DateTime
, men dit oprindelige spørgsmål fortalte os det ikke.
For mere information om brug af DataReader
s, konsulter MSDN.