Читать большое число с oracle odbc

1

У меня есть таблица Oracle с столбцом типа NUMBER(38,0)

Мне нужно получить этот столбец в моем приложении С#.

Я использую библиотеку System.Data.Odbc.OdbcDataReader для чтения данных из моей таблицы Oracle.

Я попытался получить данные, используя обычные функции, такие как:

var data = oracleReader["COLUMN"].ToString();

А также

var data = oracleReader.GetString(0);

И даже oracleReader.GetBytes().

Но я всегда получаю System.OverflowException, потому что OdbcDataReader всегда пытается получить столбец как decimal на последнем шаге:

System.OverflowException: Value was either too large or too small for a Decimal.
   at System.Data.Odbc.OdbcDataReader.internalGetDecimal(Int32 i)
   at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap)
   at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)
   at System.Data.Odbc.DbCache.AccessIndex(Int32 i)
   at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i)
   at System.Data.Odbc.OdbcDataReader.GetString(Int32 i)

Я рад, если я смогу получить эти данные как String для моего приложения.

FYI, я не могу изменить тип данных столбца, мне нужно работать с этим.

Теги:
odbc

1 ответ

0

Этот тип данных является псевдонимом для типа данных NUMBER (38) и разработан таким образом, что OracleDataReader возвращает System.Decimal или OracleNumber вместо целочисленного значения. Использование типа данных.NET Framework может привести к переполнению.

Подумайте об этом, вам действительно нужно, чтобы BigInteger мог представлять одинаковое количество значащих цифр относительно того, что по умолчанию NUMBER. Я никогда не видел, чтобы кто-то это делал, и я предполагаю, что это очень редкая потребность. Также BigInteger все равно не сократил его, так как NUMBER может иметь положительную и отрицательную бесконечность.

Вы можете использовать этот список для будущих исследований.

  • 0
    Есть ли способ обойти .NET-представление? Мне просто нужно данные в мое приложение в любом формате. Моя проблема не в том, как представлять данные, когда они у меня наконец есть.
  • 0
    Если вы попробуете: object data = oracleReader ["COLUMN"], выдает ли это исключение?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню