СУБД Oracle; С#; Исключение InvalidCast при чтении десятичного значения

  DbDataReader _dbReader = query.SendQuery(queryTxt, ref error, fromWhere) //custom method 
  string value;
  ...
  try
  {
       DateTime dateTimeValue = (DateTime)_dbReader[i];
       value = dateTimeValue.ToString("yyyy-MM-dd HH:mm:ss");
  }
  catch(Exception ex)
  {
       **value = _dbReader[i].ToString();**  // culprit statement
  }
}
catch (System.OverflowException ex)
{
   // handled gracefully
}

Если я читаю результаты простого запроса, например:

select 1, 1.4, 2/3 from dual

Затем код возвращает InvalidCastException при чтении последнего значения 2/3, что мне неизвестно, когда он может преобразовать каждое второе десятичное число в строку, почему бы не 2/3? Я знаю, что это будет максимальная точность, которую позволяет Oracle RDBMS, но все же это десятичная дробь.

Вдобавок к сложности вышеуказанной проблемы, код отлично работает с клиентскими инструментами Oracle 11*, но проблема возникает только с клиентскими инструментами Oracle 12c. Я попытался просмотреть документацию по API OracleDataAccess, но не смог найти никаких обновлений, связанных с этой проблемой.

Я могу добавить еще один блок catch для InvalidCastException и попробовать использовать GetDecimal или что-то подобное, чтобы избежать ошибки, но что, если значение не является десятичным, а код в блоке catch снова вызывает исключение.

Любые мысли/идеи?


person Tulasiram    schedule 15.01.2015    source источник
comment
Вы можете сделать .GetValue для ссылки на объект, а затем проверить интересующие вас типы, например. «если (myObj является десятичным)», затем приведите его к десятичному числу и т. д.   -  person user469104    schedule 15.01.2015
comment
Показать объявление переменной значения и _dbReader.   -  person OldProgrammer    schedule 15.01.2015
comment
@OldProgrammer Добавлено в основной пост.   -  person Tulasiram    schedule 15.01.2015
comment
Вы можете проверить этот пост временная метка оракула в C Sharp"> stackoverflow.com/questions/24990166/   -  person Oğuz Sezer    schedule 16.01.2015
comment
Я пытаюсь понять, почему это исключение возникает при попытке преобразования в строку? я имею в виду _dbReader[i].ToString(); Или, когда мы вызываем _dbReader[i], внутри он пытается сохранить значение во временной переменной, и для него будет вызываться ToString, я предполагаю, что эта временная переменная десятичная, может быть, я не знаю. Любые идеи, что именно происходит внутри?   -  person Tulasiram    schedule 17.01.2015