sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan får du nullbar DateTime ud af databasen

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.



  1. Transactionscope-undtagelse denne platform understøtter ikke distribuerede transaktioner, mens forbindelsesobjekt åbnes

  2. Indsæt flere rækker UDEN at gentage INSERT INTO ...-delen af ​​sætningen?

  3. Sådan beregnes en kvadratrod i SQL

  4. Ormlite eller sqlite Hvilken er god til Android-perspektiv?