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 снова вызывает исключение.
Любые мысли/идеи?