Hodnota SQL null není stejná jako hodnota .NET null; musíte porovnat s System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
V odpovědi na váš komentář typ dat Item
vlastnost DataReader
je typ podkladové databáze. Může to být System.Data.SqlTypes.SqlDateTime
pro nenulovou databázi SQL Server nebo System.DBNull
pro prázdný sloupec nebo System.Data.Odbc.OdbcTypes.SmallDateTime
pro databázi ODBC nebo opravdu cokoliv. Jediné, na co se můžete spolehnout, je, že je typu object
.
To je také důvod, proč doporučuji použít Convert.ToDateTime()
místo typu donucení zadejte DateTime
. Neexistuje žádná záruka, že ODBC nebo jakýkoli sloupec s datem bude možné převést na DateTime
.NET . Beru na vědomí, že váš komentář specifikuje "sqldatareader" a SQL Server System.Data.SqlTypes.SqlDateTime
lze skutečně vynutit System.DateTime
, ale vaše původní otázka nám to neřekla.
Další informace o používání DataReader
s, obraťte se na MSDN.