2009-12-15 21 views
8

को नंबर मैं जानता हूँ कि कई धागे और इंटरनेट में इस मुद्दे के बारे में पोस्ट देखते हैं और मैं उन्हें पढ़ा है (नहीं हर लेख, मैं स्वीकार करना होगा), लेकिन उनमें से कोई भी पूरी तरह से मुझे संतुष्ट किया।ओरेकल सी # दशमलव

मेरे स्थिति:
मैं Oracle DB का उपयोग करने की ODP.net (dll संस्करण 2.111.6.0) का उपयोग कर रहा (संस्करण 10 + 11) और डेटा (.NET 3.5, सी #) को पुनः प्राप्त करने के लिए एक DataReader।

एक में इस कोड का उपयोग कर परिणाम ' System.OverflowException (अंकगणित आपरेशन एक अतिप्रवाह में हुई।)'


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

और ' 3,000000000000000000000000000000000000000000000000000000000E-126' के एक मूल्य में यह एक परिणाम


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

अब मैं किसी तरह से ठीक से निकालते हैं और यह मान का मूल्यांकन करने के खोजने के लिए - डीबी भी जो मेरे नियंत्रण से बाहर हैं अन्य एप्लिकेशन से प्रयोग किया जाता है इसलिए वहां परिवर्तन संभव नहीं हैं।

'डबल' से 'दशमलव' से प्रकार परिवर्तित मेरी सी # कोड में भी वास्तव में एक विकल्प नहीं है।

कोई भी विचार?

उत्तर

8

मैं सिर्फ एक समान मुद्दा था, और OracleDataAdapter बदलते ओरेकल विशिष्ट प्रकार (data_adapter.ReturnProviderSpecificTypes = true) वापस जाने के लिए के दृष्टिकोण की कोशिश की है, लेकिन यह सिर्फ है एक PITA, आप अंत कास्टिंग OracleStrings वापस तार करने के लिए, आदि अंत मैं परिशुद्धता SQL विवरण में गोलाई Oracle की दौर फ़ंक्शन का उपयोग करके इसे हल में

:

SELECT round(myfield, 18) FROM mytable 

DotNet तो खुशी से परिवर्तित कर देंगे एक डी के लिए आंकड़ा cimal।

+0

हाय डेव, संकेत के लिए धन्यवाद! –

+1

यह बहुत बड़ी संख्या में विफल रहता है – Stig

15

ओरेकलडेसिमल दशमलव से एक बड़ा परिशुद्धता है। इसी कारण से, आपको पहले परिशुद्धता को कम करना होगा। सभी पार्सिंग को भूल जाओ, निहित रूपांतरण का उपयोग करें। (Untested) की तर्ज पर कुछ प्रयास करें:

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

मुझे ओरेकल से नफरत है; तो हर कोई सिर्फ नियमित दशमलव चाहता है, फिर भी ओरेकल हमें हुप्स के माध्यम से कूदता है। – eschneider

+1

धन्यवाद, मैंने इसे अपने समाधान के रूप में उपयोग किया। मेरा पहला ओरेकल प्रदाता के साथ काम कर रहे एक सुखद एक .... – Etch

+1

eschneider नहीं किया गया है: Oracle बड़ा precission से पहले सी # आविष्कार किया गया था, इसलिए वे कुछ है कि पूर्ण परिशुद्धता डेटाबेस प्रस्ताव दिया है का उपयोग कर की अनुमति देता है क्या करना है। –

संबंधित मुद्दे