2014-05-08 19 views
0

對於具有存儲在數據庫中的「31724977359034458496430204230」的具體示例,但是當我將dataadapter.Fill()用於帶有小數列的數據表時,我得到的是「3172497735903445849643020435」。爲什麼我的Oracle編號在使用Oracle.ManagedDataAccess.dll填充我的數據集時被改變?

我正在使用Oracle.ManagedDataAccess.dll,並且我沒有Microsoft提供程序的這個問題。

如果能幫助任何人,我可以提供反編譯的「GetDecimal」Oracle函數。

注意:只有在小數位數爲29位數字時纔會出現這種情況。

編輯:正在從另一個表中的外鍵列正確檢索相同的值。兩者都定義爲Number(30,0)

回答

0

Oracle NUMBER最多可以有38位有效數字。 .NET Framework十進制類型僅限於28位數字。將Oracle NUMBER讀入.NET Framework十進制類型會導致超過28位數的NUMBER值出現OverflowException。如果您從OracleDataReader讀取Oracle NUMBER值,我們建議您調用GetOracleNumber類型的訪問器方法以Oracle NUMBER值作爲OracleNumber返回值。如果您正在填充DataSet,則可以使用FillError事件來確定是否發生了OverflowException,如果是,則採取適當的操作。

+0

我沒有得到一個OverflowException。正在從其他列正確檢索十進制值,所以我最終有一個問題,試圖匹配一個外鍵(正確檢索)到我的主鍵(檢索時更改) – Kim

+0

我不理解你,在你的原始文章中檢索到的值是不正確,現在你說它正在爲其他列正確檢索...所以主鍵是不正確的,但外鍵不是?那麼數據庫上的密鑰之間有什麼區別(檢查精度和比例)。但請注意,對於十進制數據類型,.NET限制爲28位數。另一方面,我從來沒有使用Oracle.ManagedDataAccess.dll,但標準的odp.net DLL。 –

+0

我編輯了我的問題更詳細。此外,在微軟網站上,它指出:十進制的28-29有效數字。它在本地正確存儲在dataTable中並正確推送到數據庫中。 – Kim

相關問題