我的 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);
在回答您的评论时,DataReader
的Item
属性的数据类型是基础数据库类型的数据类型。对于非空 SQL Server 数据库,它可以是 System.Data.SqlTypes.SqlDateTime
,对于空列可以是 System.DBNull
,或者是 System.Data。 Odbc.OdbcTypes.SmallDateTime
用于 ODBC 数据库,或者几乎任何东西。您唯一可以依赖的是它是 object
类型。
这也是我建议使用 Convert.ToDateTime()
而不是类型强制转换为 DateTime
的原因。不保证可以将 ODBC 或任何日期列强制转换为 .NET DateTime
。我注意到你的评论指定了一个“sqldatareader”,一个 SQL Server System.Data.SqlTypes.SqlDateTime
确实可以被强制转换为一个 System.DateTime
,但是你原来的问题没有不要告诉我们。
有关使用 DataReader
的更多信息,请参阅 MSDN .
关于c# - 如何从数据库中获取可为空的 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503698/