2014-06-19 5 views
5

मेरे पास ओरेकल 12 सी का उपयोग ऑरैकल.मैनेज्डडाटाकैस (एनएचबीरनेट 4.0 के माध्यम से) के माध्यम से एक विनफॉर्म सी # एप्लिकेशन है, ओरेकल डेटाबेस ग्राहक साइट पर दूसरी मशीन पर है, जिसके कारण हमें चरित्र सेट रूपांतरण के साथ समस्याएं हैं ओरेकल डेटाबेस और क्लाइंट मशीन के बीच NLS_LANG अंतर। क्लाइंट मशीन पर केवल ओरेकल क्लाइंट स्थापित नहीं है (केवल प्रबंधित ड्राइवर का उपयोग करके)।ऑरैक प्रबंधित डेटा एक्सेस के लिए एनएलएस_एलएएनजी सेट करें

हमने पाया है कि आप एक पर्यावरण चर का उपयोग कर क्लाइंट NLS_LANG निर्दिष्ट कर सकते हैं।

मेरा प्रश्न है: क्या ओरेकल में नए प्रबंधित डेटा एक्सेस का उपयोग करते समय NLS_LANG सेटिंग निर्दिष्ट करने के कोई अन्य तरीके हैं?

उत्तर

0

वास्तव में क्या आप की जरूरत के बारे में सुनिश्चित नहीं हैं, (शब्द "Oracle में नया प्रबंधित डेटा एक्सेस" यहाँ एक घंटी बजाने नहीं है।) लेकिन मैं इस पाया:

http://docs.oracle.com/html/E41125_02/featGlobal.htm#i1008314

कॉलिंग Oracle.DataAccess.Client.OracleConnection की विधि GetSessionInfo()Oracle.DataAccess.Client.OracleGlobalization कक्षा का एक ऑब्जेक्ट देता है, जो ओडीपी.NET डेवलपर गाइड के अनुसार, ओरेकल डीबी सत्र के स्तर पर एनएलएस-विशिष्ट सेटिंग्स को बदलने के लिए उपयोग किया जा सकता है।

3

मैं इस प्रकार दिनांक प्रारूप सेट करने के लिए ओरेकल ग्लोबलाइजेशन का उपयोग कर रहा हूं। यह आपको एक सुराग दे सकता है ..

conn = new OracleConnection(connectionString); 
     conn.Open(); 
     OracleGlobalization info = conn.GetSessionInfo(); 
     info.DateFormat = "YYYY-MM-DD"; 
     conn.SetSessionInfo(info); 
1

आप एनएलएस_एलएएनजी कुंजी के लिए विंडोज रजिस्ट्री को देखना चाहेंगे। कुंजी को सेट करना पर्यावरण परिवर्तक को सेट करने के बराबर बराबर है, लेकिन यदि दोनों मौजूद हैं तो पर्यावरण परिवर्तक प्राथमिकता लेता है। यह StackOverflow सवाल इस सवाल से संबंधित एक छोटा सा गया:

Effects of changing NLS_LANG setting in the registry for Oracle Client

मेरी स्थापना सत्र आज के दौरान, हम तो पता चला कि हमारे वेब अनुप्रयोग 64-बिट ऑपरेटिंग सिस्टम से अधिक 32-बिट मोड में चल रहा है, इस्तेमाल किया जा रहा रजिस्ट्री स्थान मानक एक से अलग है। यह HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Wow6432Node \ ORACLE \ KEY_OraClient11g_home1 में है। मैं एनएलएस_एलएएनजी कुंजी कहां से पता लगाने के लिए regedit का उपयोग कर एक वैश्विक खोज करने का सुझाव दूंगा।

+0

ODP.NET, प्रबंधित ड्राइवर रजिस्ट्री से विचार नहीं करता है 'NLS_LANG'। असल में यह रजिस्ट्री सेटिंग्स पर बिल्कुल विचार नहीं करता है। –

2

नहीं, यह संभव नहीं है, प्रलेखन Data Provider for .NET Developer's Guide देख जहां यह कहते हैं

ODP.NET, प्रबंधित ड्राइवर NLS_LANG संवेदनशील नहीं है। यह केवल .NET लोकेल संवेदनशील है।

भी देखें OracleGlobalization Properties

  • ClientCharacterSet ->public string ClientCharacterSet { get; }

    एक ग्राहक वर्ण सेट निर्दिष्ट करता है। ODP.NET में उपलब्ध नहीं है, प्रबंधित ड्राइवर

2

जब आप अप्रबंधित से प्रबंधित ODP को माइग्रेट करती समस्या को उठाती है। यहाँ करने के लिए इसे के कुछ हिस्सों से NLS_LANG स्थापित करने के लिए तरीका है OracleConnection

 string nlsLang = Settings.Default.NLS_LANG; 
     var arr = nlsLang.Split('_'); 
     string language = arr[0]; 
     arr = arr[1].Split('.'); 
     string territory = arr[0]; 
     string characterSet = arr[1]; 

     OracleGlobalization info = connection.GetSessionInfo(); 
     info.Language = language; 
     info.Territory = territory; 
     info.NumericCharacters = characterSet; 
     connection.SetSessionInfo(info); 
0

मैं NHibernate का उपयोग कर रहा खोला है, लेकिन आप शायद जो कुछ भी आप उपयोग कर रहे हैं के साथ इस चला सकते हैं।

ALTER session SET nls_language = 'AMERICAN' 

मैं डेटाबेस कनेक्शन खोलने के बाद इसे निष्पादित करता हूं।

एक बार ऐसा करने के बाद, यह रिटर्न 'यूएस' चला रहा है।

select USERENV('LANG') from dual; 

और आप इस चलाने nls_language के लिए संभावित मानों की एक सूची प्राप्त कर सकते हैं।

select * from V$NLS_VALID_VALUES where parameter = 'LANGUAGE' 
+0

यह समाधान उतना मजबूत नहीं हुआ जितना मुझे पसंद आया। मैंने 'यूएस' वापस करने के लिए USERENV ('LANG') प्राप्त करने के लिए "क्षेत्र और भाषा> प्रारूप" सेटिंग को "अंग्रेज़ी (संयुक्त राज्य)" सेटिंग सेट करने का सहारा लिया है। – yohosuff

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