2010-07-10 22 views
1

我正在通過ODBC連接從DB2數據庫讀取記錄。數據被填充到ODBCDataReader中。當我正在通過我的foreach循環時,我遇到了試圖解析多個不同日期時間字段的問題。閱讀空數據和空日期值的C#ODBCDataReader

某些字段爲空,有些字段的日期時間值爲空(9999-12-31 24:00:00:00),有些字段的日期時間值有效(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()名稱=「爲DBNull」似乎捕捉空值工作。然而,下一個if語句會引發ArgumentOutOfRangeException錯誤。這似乎發生在具有9999-12-31 24:00:00.000000值的字段上。

有沒有辦法正確解析這個?看起來像我試圖評估這些空日期時間字段拋出錯誤的任何方式。

+0

它看起來像我不能觸摸沒有ArgumentOutOfRangeException的dr [dbFieldName]字段被引發時,該字段包含時間值24:00:00.000000。 – 2010-07-10 05:12:01

+0

好吧,它看起來像我找到了解決方案。我不會選擇數據庫中的這些DateTime字段作爲時間戳,而是選擇它們作爲字符串。然後我可以根據需要解析這些值,並將它們放入DateTime對象中。 – 2010-07-10 05:40:29

回答

0

除了傑羅德的評論。

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,則執行上述狀態。

+0

現在的問題是,因爲「9999-12-31 24:00:00.000000」作爲DateTime值無效,顯然是我的ODBCDataReader包含的內容,我將如何獲取該值? – 2010-07-10 03:55:44

0

兩個建議:

1)使用DBNull.Value對象檢查null。
2)使用DateTime.MaxValue檢查12/31/999 24:00:00。

希望這可以幫助您更接近地發現問題。

+0

用建議#1更新了我的代碼。 DateTime.MaxValue是隻讀的,並且說Raj Kaimal指出上面23:59.00是最大值。 – 2010-07-10 03:54:21

0

將IF/ELSE包裝在TRY/CATCH中。這不是一個好的形式,但抓住這個例外是值得的。

+0

這是我最初使用的路線,但是我的輸出/調試窗口被充斥着有關被捕獲錯誤的消息。如果可能,我想嘗試找到不涉及此方法的解決方案。 – 2010-07-10 03:58:26