2014-12-02 2 views
1

Я таблицу Oracle с колонкой типа NUMBER(38,0)Прочитайте большое количество с ODBC для Oracle

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

Я использую библиотеку 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, я не могу изменить тип данных столбца, мне нужно работать с этим.

ответ

0

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

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

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

+0

Есть ли способ обойти представление .NET? Мне просто нужны данные в моем приложении в любом формате. Моя проблема заключается не в том, как представлять данные, когда я, наконец, ее получил. – Blc

+0

Если вы попробуете: object data = oracleReader ["COLUMN"], генерирует ли это исключение? –

+0

Да, это делает исключение – Blc

Смежные вопросы