SQLnullは.NETnullと同じではありません。 System.DBNull.Valueと比較する必要があります:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
あなたのコメントに答えて、Item
のデータ型 DataReader
のプロパティ 基になるデータベースタイプのものです。 System.Data.SqlTypes.SqlDateTime
の可能性があります null以外のSQLServerデータベースの場合、またはSystem.DBNull
null列の場合、またはSystem.Data.Odbc.OdbcTypes.SmallDateTime
ODBCデータベースの場合、または実際にはほぼすべて。信頼できる唯一のことは、タイプがobject
であるということです。 。
これが、Convert.ToDateTime()
の使用を提案する理由でもあります。 DateTime
に強制を入力する代わりに 。 ODBCまたは任意の日付列を.NETDateTime
に強制できるという保証はありません。 。あなたのコメントは「sqldatareader」とSQLServerSystem.Data.SqlTypes.SqlDateTime
を指定していることに注意してください 確かにSystem.DateTime
に強制することができます 、しかしあなたの最初の質問は私たちにそれを教えてくれませんでした。
DataReader
の使用の詳細については s、MSDNを参照してください。