使用 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
,我很高兴。
仅供参考,我无法更改列的数据类型,我需要使用它。
此数据类型是 NUMBER(38) 数据类型的别名,旨在使 OracleDataReader 返回 System.Decimal 或 OracleNumber 而不是整数值。使用 .NET Framework 数据类型可能会导致溢出。
想想看,你实际上需要 BigInteger 能够表示与 NUMBER 默认相同数量的有效数字。我从未见过有人这样做,我认为这是一种非常罕见的需求。此外,BigInteger 仍然不会削减它,因为 NUMBER 可以是正无穷大和负无穷大。
您可以将此列表用于将来的研究。