我的 SQL Server 数据库包含可为空的 DateTime 值。如何将它们转换为 C# 应用程序中可为 null 的 DateTime 对象?
这就是我认为的样子,但事实并非如此:
DateTime? dt = (DateTime?) sqldatareader[0];
SQL null 与 .NET null 不同;您必须与 System.DBNull.Value 进行比较:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
为了回答你的评论,数据类型Item
的财产DataReader
是底层数据库类型的类型。它可能是System.Data.SqlTypes.SqlDateTime
对于非空 SQL Server 数据库,或者System.DBNull
对于空列,或者System.Data.Odbc.OdbcTypes.SmallDateTime
对于 ODBC 数据库,或者任何其他数据库。你唯一可以信赖的是它是类型object
.
这也是我建议使用的原因Convert.ToDateTime()
而不是类型强制DateTime
。不保证 ODBC 或任何日期列可以强制转换为 .NETDateTime
。我注意到你的评论指定了一个“sqldatareader”和一个 SQL ServerSystem.Data.SqlTypes.SqlDateTime
确实可以被强制System.DateTime
,但你原来的问题并没有告诉我们这一点。
有关使用的更多信息DataReader
s,咨询MSDN http://msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.100%29.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)