C#ODBCDataReader读取空数据和空日期值

时间:2010-07-10 02:54:19

标签: c# odbc db2

我正在通过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值的字段上。

有没有办法正确解析这个?似乎我尝试评估这些空日期时间字段时会抛出错误。

3 个答案:

答案 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中。它并不被认为是好的形式,但是抓住这个例外是可以工作的。

相关问题