使用 oracle odbc 读取大量数字

本文关键字:数字 读取 oracle odbc 使用 | 更新日期: 2023-09-27 18:32:59

我有一个 Oracle 表,其中有一列类型为 NUMBER(38,0)

我需要将此列提取到我的 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,我很高兴。

仅供参考,我无法更改列的数据类型,我需要使用它。

使用 oracle odbc 读取大量数字

此数据类型是 NUMBER(38) 数据类型的别名,旨在使 OracleDataReader 返回 System.Decimal 或 OracleNumber 而不是整数值。使用 .NET Framework 数据类型可能会导致溢出。

想想看,你实际上需要 BigInteger 能够表示与 NUMBER 默认相同数量的有效数字。我从未见过有人这样做,我认为这是一种非常罕见的需求。此外,BigInteger 仍然不会削减它,因为 NUMBER 可以是正无穷大和负无穷大。

您可以将此列表用于将来的研究。