2011-03-31 9 views
43

मैंने कुछ उदाहरण देखे हैं जिनमें decimal का उपयोग एनएचबर्ननेट परियोजनाओं में ओरेकल में पूरे नंबर कॉलम पर मैपिंग के लिए किया जाता है। अभी मैं अपने कार्यक्रम में int और long का उपयोग कर रहा हूं।एनएचईबीनेट में NUMBER ओरेकल डेटा प्रकार मैपिंग के लिए कौन सा .NET डेटा प्रकार सबसे अच्छा है?

decimalint/long से अधिक फायदे क्या हैं? क्या यह बेहतर प्रदर्शन करता है?

+0

आप से क्या मतलब है "पूर्णांक से अधिक दशमलव के फायदे/लंबे? यह बेहतर प्रदर्शन करता है कर रहे हैं क्या?", दशमलव पूर्णांक/लंबे ... – Phill

+0

@Phill हालांकि, एक दशमलव की तरह पूरे नंबर नहीं हैं * * ** एक पूर्ण संख्या का प्रतिनिधित्व कर सकता है, और मैंने विभिन्न उदाहरणों में 'int' /' long' के बजाय 'दशमलव' का उपयोग किया है। मैं बस समझने की कोशिश कर रहा हूं क्यों। –

उत्तर

50

मैं दशमलव देखा है विभिन्न उदाहरणों में/लंबे पूर्णांक के बजाय इस्तेमाल किया। मैं तो बस यही कारण है कि

शायद इसलिए है क्योंकि नेट decimal और Oracle NUMBERmaps a bit better से long और NUMBER है कि समझने की कोशिश कर रहा हूँ और यह भी आप और अधिक लचीलापन देता है। यदि आप बाद के चरण में ओरेकल कॉलम में स्केल जोड़ते हैं तो आपको पहले से decimal का उपयोग करने पर डेटाटाइप बदलना नहीं होगा।

decimalint और long से निश्चित रूप से धीमा है क्योंकि बाद में दो हार्डवेयर में समर्थित हैं। उस ने कहा, आपको कोई फर्क पड़ने के लिए कुछ गंभीर मात्रा में डेटा क्रंच करना होगा। मुझे अभी भी लगता है कि आपको long का उपयोग करना चाहिए यदि आप यही कर रहे हैं और फिर आपको टेबल कॉलम परिभाषाओं को भी प्रस्तुत करना चाहिए। long और इसी तरह के लिए।

कारण decimal थोड़ा बेहतर नक्शा है कि long 64 बिट्स और decimal 128 बिट्स (प्रकार) है।

नेट

प्रकार: दशमलव
लगभग रेंज: 28-29 महत्वपूर्ण अंक

: ± 1.0 × 10^-28 7.9 × 10^28
प्रेसिजन ± करने के लिए

टाइप: लंबे
रेंज: -9,223,372,036,854,77 9,223,372,036,854,775,807
प्रेसिजन करने के लिए 5808: 18 (Ulong के लिए 19) महत्वपूर्ण अंक

ओरेकल

NUMBERdefaults 38 के लिए महत्वपूर्ण अंक और बड़े पैमाने 0 (पूर्णांक)।

प्रकार: संख्या
रेंज: + - 1 x 10^9.99 करने के लिए -130 ...9 x 10^125
प्रेसिजन: 38 महत्वपूर्ण अंक

माइक्रोसॉफ्ट समस्या से अवगत है और notes

यह डेटा प्रकार, संख्या (38) डेटा प्रकार के लिए एक उपनाम है और डिज़ाइन किया गया है ताकि OracleDataReader एक पूर्णांक मान के सिस्टम। डेसिमल या ओरेकल नम्बर लौटाए। .NET फ्रेमवर्क डेटा प्रकार का उपयोग ओवरफ़्लो का कारण बन सकता है।

यह सोचने के लिए आओ आप वास्तव में BigInteger जरूरत क्या NUMBER डिफ़ॉल्ट रूप में के रूप में सार्थक अंकों की एक ही नंबर का प्रतिनिधित्व करने में सक्षम हो। मैंने कभी ऐसा नहीं देखा है और मुझे लगता है कि यह एक बहुत दुर्लभ जरूरत है। BigInteger भी NUMBER सकारात्मक और नकारात्मक अनंतता के बाद से इसे काट नहीं पाएगा।

+0

हर दिन कुछ नया सीखें :) – Phill

+0

// यह मेरे लिए बहुत अधिक समझ में आता है। इस महान स्पष्टीकरण के लिए बहुत धन्यवाद जोनास ...! –

+0

चुटकी में, आप हमेशा https://docs.oracle.com/cd/B28359_01/win.111/b28375/featTypes.htm में संकेत के रूप में 'Oracle.ManagedDataAccess.Types.OracleDecimal' पर मानचित्र का उपयोग कर सकते हैं - IIRC संख्या के साथ काम करता है (38) और +/- आईएनएफ मामलों को संभालती है। – quetzalcoatl

30
[.NET: Int32] = [Oracle:NUMBER(2)..NUMBER(9)*] 
[.NET: Int64] = [Oracle:NUMBER(10)..NUMBER(18)*] 
[.NET: Double] = [Oracle:NUMBER(x, 0)..NUMBER(x, 15)*] 
[.NET: Double] = [Oracle: FLOAT] 
[.NET: Decimal] = [Oracle:NUMBER] 
+1

मुझे नहीं पता कि आपने इसे कहाँ से लिया था, लेकिन यह वास्तव में ऐसा नहीं होता है। जो कुछ मैं देखता हूं, 'डबल' को 'डबल प्रेसीशन' में मैप किया जाता है, 'int' हमेशा 'NUMBER (10,0)' और 'दशमलव' पर मैप किया जाता है, किसी भी' NUMBER (x, y) 'के आधार पर मैप किया जा सकता है 'प्रेसिजन (एक्स) .Scale (वाई)' सेटिंग्स। वैसे, 'int' की 'प्रेसिजन' का अर्थ बदलना मैपिंग नहीं बदलता है - यह अभी भी' NUMBER (10,0) 'है। और इसके अलावा, यह मेरे प्रश्न का उत्तर नहीं देता है। –

+0

मैं 'देवर्ट' का उपयोग करता हूं, मैंने निम्नलिखित उत्तर पढ़ा है जो ओरेकल और नेट के बीच सीएसडीएल मैपिंग प्रकारों का वर्णन करता है .http: //www.devart.com/forums/viewtopic.php? T = 15604 – Homam

+2

लेकिन मैंने एनएचबेर्नेट के बारे में पूछा। .. –

7
NUMBER(1,0)  => Boolean   
NUMBER(5,0)  => Int16/short.MaxValue == 32767  
NUMBER(10,0) => Int32/int.MaxValue == 2,147,483,647  
NUMBER(19,0) => Int64/long.MaxValue == 9,223,372,036,854,775,807  
संबंधित मुद्दे