我正在通过ODBC连接从DB2数据库中读取记录。数据填充到ODBCDataReader中。当我经历我的foreach循环时,我遇到了试图解析多个不同DateTime字段的问题。
部分字段为空,部分字段为空日期时间值(9999-12-31 24:00:00.000000),部分字段具有有效日期时间值(2010-07-09 20:43:32.037234)。
我尝试过这样的事情来捕捉空日期错误:
if (!dr[dbFieldName].Equals(DBNull.Value))
{
if (dr.GetDate(dr.GetOrdinal(dbFieldName)).Equals(DateTime.Parse("9999-12-31 24:00:00.000000")))
{
fieldValues[tag] = "";
}
else
{
strValue = dr.GetDate(dr.GetOrdinal(dbFieldName)).ToString("s");
fieldValues[tag] = strValue.Trim();
}
}
GetType()。Name!=“DBNull”似乎适用于捕获空值。但是,下一个if语句会抛出ArgumentOutOfRangeException错误。这似乎发生在9999-12-31 24:00:00.000000值的字段上。
有没有办法正确解析这个?似乎我尝试评估这些空日期时间字段时会抛出错误。
答案 0 :(得分:0)
两个建议:
1)使用DBNull.Value对象检查null 2)使用DateTime.MaxValue检查12/31/999 24:00:00。
希望这有助于您更接近发现问题。
答案 1 :(得分:0)
除了Jerod的评论。
DateTime.Parse("9999-12-31 23:59:00.000000") is valid
DateTime.Parse("9999-12-31 24:00:00.000000") is invalid
...更新
问题是24:00不被视为24小时制中的有效时间(无论日期如何)。您可以使用
解决这个问题 DateTime.ParseExact("9999-12-31 24:00:00.000000", "yyyy-MM-dd 24:mm:ss.ffffff",
System.Globalization.CultureInfo.InvariantCulture);
在DateTime.TryParse方法之后。如果TryParse成功,则您有一个有效的日期。如果返回false,则执行上述状态。
答案 2 :(得分:0)
将IF / ELSE包裹在TRY / CATCH中。它并不被认为是好的形式,但是抓住这个例外是可以工作的。