【发布时间】:2017-03-22 15:41:15
【问题描述】:
我有以下代码应该检查数据读取器中的值是否不为空。如果是,则该方法应返回空值或空 DateTime 以供以后使用。
private static DateTime safeGetDateTime(OleDbDataReader dr, int idx)
{
if (!dr.IsDBNull(idx))
return dr.GetDateTime(idx);
else return DateTime.MinValue;
}
我尝试只返回 null,但由于方法返回类型是“DateTime”,所以这不起作用。然后,如果数据读取器拾取空值,我尝试返回 DateTime.MinValue。这给了我以下错误:
SqlDateTime 溢出。必须在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。
感谢任何帮助。
【问题讨论】:
-
使用可以为空的
DateTime? -
如果您注意到错误来自
SqlDateTime而不是DateTime,我想您会发现它在return dr.GetDateTime(idx);行而不是return DateTime.MinValue;行上引发了异常。 -
@MichaelL。这似乎不太可能,因为数据库中的值已经是有效的 SQL 日期。我怀疑OP误解了错误的位置,实际上是在将值写入数据库时,而不是在从数据库中读取时。
-
您确定这是错误的位置吗?将值写入数据库时可能会发生该错误(尽管在您更改代码之前,您之前的 null 转换错误会在这里发生)。
-
@JeffreyLWhitledge 好点,你是对的。
标签: c# sql datetime oledbdatareader