У меня есть таблица 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, я не могу изменить тип данных столбца, мне нужно работать с этим.
Этот тип данных является псевдонимом для типа данных NUMBER (38) и разработан таким образом, что OracleDataReader возвращает System.Decimal или OracleNumber вместо целочисленного значения. Использование типа данных.NET Framework может привести к переполнению.
Подумайте об этом, вам действительно нужно, чтобы BigInteger мог представлять одинаковое количество значащих цифр относительно того, что по умолчанию NUMBER. Я никогда не видел, чтобы кто-то это делал, и я предполагаю, что это очень редкая потребность. Также BigInteger все равно не сократил его, так как NUMBER может иметь положительную и отрицательную бесконечность.
Вы можете использовать этот список для будущих исследований.