C # ODBCDataReader читает нулевые данные и нулевые значения даты - PullRequest
1 голос
/ 10 июля 2010

Я читаю запись из базы данных DB2 через соединение ODBC.Данные заполняются в 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 голосов
/ 10 июля 2010

В дополнение к комментарию Джерода.

DateTime.Parse("9999-12-31 23:59:00.000000") is valid
DateTime.Parse("9999-12-31 24:00:00.000000") is invalid

update ....

Проблема 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 голосов
/ 10 июля 2010

Заверните IF / ELSE в TRY / CATCH. Это не считается хорошей формой, но гарантированное срабатывание ловли исключения.

0 голосов
/ 10 июля 2010

Два предложения:

1) Используйте объект DBNull.Value для проверки на нулевое значение.
2) Используйте DateTime.MaxValue для проверки 12/31/999 24: 00: 00.

Надеюсь, это поможет вам приблизиться к поиску проблемы.

...