簡體   English   中英

Oracle編號為C#decimal

[英]Oracle number to C# decimal

我知道在互聯網上有幾個關於這個問題的帖子和帖子我已經閱讀過了(不是每篇文章,我都要承認)但是沒有一個能完全滿足我。

我的情況:
我正在使用ODP.net(dll版本2.111.6.0)訪問Oracle DB(版本10 + 11)和DataReader來檢索數據(.NET 3.5,C#)。

' 使用此代碼會導致'


decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

' 這一個導致值為' '


decimal.TryParse(oraReader.GetOracleValue(0).ToString(), 
  NumberStyles.Any, null, out parsedOraDecimal)

現在我必須找到一些方法來正確檢索和評估這個值 - 數據庫也可以從我無法控制的其他應用程序中使用,因此無法進行更改。

將我的C#代碼中的類型從'decimal'轉換為'double'也不是一個真正的選擇。

有任何想法嗎?

OracleDecimal具有比decimal更大的精度。 因此,您必須首先降低精度。 忘記所有解析,使用隱式轉換。 嘗試一下(未經測試的):

decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));

我剛剛遇到了類似的問題,並嘗試了更改OracleDataAdapter以返回Oracle特定類型(data_adapter.ReturnProviderSpecificTypes = true;)的方法,但這只是一個PITA,最終將OracleStrings轉換回字符串等。

最后,我通過使用Oracle的round函數在SQL語句中進行精確舍入來解決它:

SELECT round( myfield, 18 ) FROM mytable

然后,Dotnet會愉快地將數字轉換為小數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM