2014-12-02 68 views
1

大量我和类型NUMBER(38,0)阅读与Oracle ODBC

我需要此列取到我的C#应用​​程序的列Oracle表。

我使用库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我的应用程序。

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

回答

0

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

想想看吧,您实际上需要BigInteger才能够表示与NUMBER默认值相同的有效位数。我从来没有见过任何人这样做,我认为这是非常罕见的需要。此外BigInteger仍然不会削减它,因为NUMBER可以是正面和负面的无限。

您可以使用this list作为未来的研究。

+0

无论如何绕过.NET表示?我只需要将数据以任何格式存入我的应用程序。我的问题不是在我终于拥有它时如何表示数据。 – Blc 2014-12-02 18:10:15

+0

如果您尝试:object data = oracleReader [“COLUMN”],它是否会抛出异常? – 2014-12-02 18:14:58

+0

是的,它确实会抛出异常 – Blc 2014-12-02 18:20:26