2009-06-25 123 views
13

我正在使用c#.net 2(Visual Studio 2005 SP1)嘗試用來自Oracle10g數據庫的select * from表填充數據集。 .net框架,IDE和數據庫不能在此客戶站點上更改爲ODP.net Oracle Decimal填充數據集時的精度問題。例外:算術運算導致溢出

我使用ODP.net提供商連接DLL版本是2.102.2.20

當我運行填充命令我得到一個異常:

算術運算導致的溢出

此外,如果我試圖查看Visual Studio設計器(顯示錶數據)中的違規列,我得到 ev表格中此列的第一行。如果我的查詢使用整數來選擇其他列,例如省略此列,則代碼完美工作。

所涉及的專欄看起來不錯,當我從蟾蜍的數據庫查看,數據是這樣的:

919.742866695572

我需要精度,因爲它是必需的蒙特卡羅模擬。

如果不是使用數據適配器來填充數據表我使用datareader並調用dataReader.getValue(columnIndex)我得到相同的錯誤,但如果我調用dataReader.GetOracleDecimal(columnIndex),那麼我得到我期待的結果因爲,沒有錯誤。我傾向於使用數據適配器並填充數據集(請注意,這些都是無類型數據集,因爲我無法自動生成強類型數據集以便從Oracle數據庫中工作)。我不想使用datareader並遍歷結果(挑出列值),因爲我試圖將其作爲通用方法編寫,以適用於許多場景,無論列的數量是多少,需要特定的小數列的索引通過數據類型獲取調用。

任何人都可以幫忙嗎? 我可以使用新版本的ODP.net dll連接到較舊的Oracle10g數據庫嗎?我想知道這是否會有所幫助。

謝謝

+0

將ODP.net版本更改爲11g(Oracle.DataAccess.dll 2.111.6。20)沒有幫助我仍然得到算術運算導致溢出異常。一種解決方案雖然不理想是做到這一點: SELECT TO_CHAR(offendingColumn) 從表 但現在我的DataColumn的類型是不同的,出到Excel,所以我不能確定這是否會影響到單元格的格式我寫這篇文章的數據以及。 – m3ntat 2009-06-25 15:20:21

+0

此外,它意味着我需要知道表中的每一列我不能只是做一條毯子選擇*從表 – m3ntat 2009-06-25 15:21:15

回答

1

問題是,結果值的精度太高,無法轉換爲System.Decimal而沒有某些數據丟失。我忘記了允許的數字的確切位數,但它大約在18左右。將結果值四捨五入到那麼多數字是否可以接受?在你給的例子中,round(MyColumn, 15)左右應該是足夠的...

相關問題