pik*_*chu 17 c# sql-server datetime nullable sqldatareader
我的SQL Server数据库包含可为空的DateTime值.如何在C#中的应用程序中将它们转换为可以为空的DateTime对象?
这是我认为它会是什么样子,但它没有:
DateTime? dt = (DateTime?) sqldatareader[0];
Run Code Online (Sandbox Code Playgroud)
pik*_*chu 29
我最近发现了这个技巧,很简单:
DateTime? dt = sqldatareader[0] as DateTime?;
Run Code Online (Sandbox Code Playgroud)
Dou*_*rch 28
SQL null与.NET null不同; 你必须与System.DBNull.Value进行比较:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
Run Code Online (Sandbox Code Playgroud)
在回答您的注释时,Itema 的属性的数据类型DataReader是底层数据库类型的数据类型.它可能System.Data.SqlTypes.SqlDateTime是非空的SQL Server数据库,System.DBNull空列,System.Data.Odbc.OdbcTypes.SmallDateTimeODBC数据库,或者几乎任何东西.你唯一可以依赖的是它的类型object.
这也是我建议使用Convert.ToDateTime()而不是类型强制的原因DateTime.无法保证可以将ODBC或任何日期列强制转换为.NET DateTime.我注意到你的评论指定了一个"sqldatareader",并且SQL Server System.Data.SqlTypes.SqlDateTime确实可以被强制转换为a System.DateTime,但是你的原始问题没有告诉我们.
有关使用DataReaders的更多信息,请咨询MSDN.
| 归档时间: |
|
| 查看次数: |
20025 次 |
| 最近记录: |