Een SQL null is niet hetzelfde als een .NET null; je moet vergelijken met System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
In antwoord op uw opmerking, het gegevenstype van het Item
eigenschap van een DataReader
is die van het onderliggende databasetype. Het kan System.Data.SqlTypes.SqlDateTime
zijn voor een niet-null SQL Server-database, of System.DBNull
voor een null-kolom, of System.Data.Odbc.OdbcTypes.SmallDateTime
voor een ODBC-database, of eigenlijk zo ongeveer alles. Het enige waarop u kunt vertrouwen, is dat het van het type object
is .
Dit is ook de reden waarom ik voorstel om Convert.ToDateTime()
te gebruiken in plaats van dwang te typen op DateTime
. Er is geen garantie dat een ODBC of welke datumkolom dan ook kan worden gedwongen tot een .NET DateTime
. Ik merk op dat uw opmerking een "sqldatareader" specificeert en een SQL Server System.Data.SqlTypes.SqlDateTime
kan inderdaad worden gedwongen tot een System.DateTime
, maar uw oorspronkelijke vraag heeft ons dat niet verteld.
Voor meer informatie over het gebruik van DataReader
s, raadpleeg MSDN.