2012-05-16 7 views
5

यहां मेरी समस्या है: मेरे पास सी # में एक प्रोग्राम है जो ODP.NET dlls का उपयोग करता है: oci.dll, ociw32.dll, Oracle.DataAccess.dll, orannzsbb11.dll, oraocci11.dll, oraociicus11.dll, OraOps11w। dll।सी # एप्लिकेशन में TNSNAMES फ़ाइल के लिए उचित पथ कैसे सेट करें?

मेरे पास 2 कंप्यूटर हैं। पहले पूरे ओडीएसी पैकेज के साथ स्थापित, और उस पैकेज के बिना दूसरा। लेकिन मेरे पास मेरी exe निर्देशिका में सभी आवश्यक डीएलएस हैं, इसलिए ओडीएसी कोई समस्या नहीं है (मुझे लगता है)। इन कंप्यूटरों के बीच अंतर TNSNAMES फ़ाइल का पथ है। पहले: C: \ एप्लिकेशन \ OraHome_1 \ नेटवर्क \ व्यवस्थापक \ दूसरा: C: \ ओरेकल \ उत्पाद \ 11.2.0 \ client_1 \ नेटवर्क \ व्यवस्थापक

और पहली CPU पर कार्यक्रम ठीक काम करता है। लेकिन एक ही कनेक्शन स्ट्रिंग वाले दूसरे पर, खुला कनेक्शन (ओआरए -12154) नहीं है। और एसक्यूएल प्लस का उपयोग करके मैं दोनों कंप्यूटरों पर कनेक्ट कर सकता हूं।

तो, मैं अपने कार्यक्रम को TNSNAMES के लिए उचित मार्ग कैसे दिखा सकता हूं?

+0

यह वह जगह है जहां क्लाइंट स्थापित किया गया था। – SQLMason

+1

तो, हर जगह मैं अपने प्रोग्राम का उपयोग करना चाहता हूं, क्लाइंट को एक ही स्थान पर स्थापित करना होगा? (एक ही रास्ता है)? – Marshall

उत्तर

11

आप प्रोग्राम के रूप में TNS_ADMIN वातावरण चर सेट कर सकते हैं। step by step. के लिए यह पृष्ठ देखें, यह है कि आप एक विशिष्ट TNS_NAMES.ORA फ़ाइल में बदलना चाहते हैं। ओरेकल क्लाइंट अभी भी क्लाइंट मशीन पर स्थापित होना चाहिए।

ConnectionStrings से - टीएनएस का उपयोग किए बिना:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword; 


संपादित करें: जोड़ा 3 विकल्प

कृपया see this question जो आप ग्राहक की TNS_NAMES.ORA फ़ाइल की वर्तमान स्थान खोजने में सहायता कर सकते हैं - जो आप यदि आप चाहें तो खोल सकते हैं और संशोधित कर सकते हैं (यदि यह मौजूद नहीं है तो अपना कनेक्शन जोड़ें)

+0

मुझे भी @ मार्शल से टीएनएस का उपयोग नहीं करने और आईपी द्वारा कनेक्ट करने का विचार मिला। – SQLMason

+0

धन्यवाद, लेकिन मुझे TNSNAMES फ़ाइल की आवश्यकता है - मेरे पास बहुत सारे डेटाबेस हैं और यह बहुत ही गतिशील प्रोजेक्ट है। लोग वहां से डेटाबेस जोड़ रहे हैं और हटा रहे हैं। लेकिन वैसे भी: मुझे tnsname फ़ाइल चाहिए, मेरे पास कई कंप्यूटर हैं (पेरेप्स) ऑरैकल के अलग-अलग पथ क्लाइंट और ODP.NET के बिना स्थापित, और मेरे पास सी # में प्रोग्राम है, जो इन डीएलएस का उपयोग करते हैं: dlls: oci.dll, ociw32.dll, Oracle.DataAccess.dll, orannzsbb11.dll, oraocci11.dll, oraociicus11.dll, OraOps11w। डीएलएल। तो TNS_ADMIN वैरिएबल के साथ समाधान ठीक रहेगा, है ना? – Marshall

+0

यदि आप अपनी खुद की TNS_NAMES.ORA फ़ाइल इंस्टॉल कर रहे हैं (इसे इंस्टॉल के साथ भेज रहे हैं) तो आप * ऐसा कर सकते हैं। हालांकि, आप अन्य लोगों की प्रविष्टियों को खराब कर सकते हैं - अगर उनके पास अपनी कस्टम प्रविष्टियां हैं। सबसे सुरक्षित वा यदि संभव हो तो आईपी द्वारा कनेक्ट किया जाएगा, पर्यावरण चर एक विकल्प है जो विशेष रूप से आपके प्रश्न का उत्तर देता है। – SQLMason

3

आपको अपने TNSNames फ़ाइल के पथ की परवाह करने की आवश्यकता नहीं है: इसे स्वचालित रूप से लाइब्रेरी द्वारा ही खोजा जाएगा ... एक बार जब आप इसे इंस्टॉल कर लेंगे। यह महत्वपूर्ण बिंदु है: आपके प्रोजेक्ट के भीतर डीएलएल वितरित करना पर्याप्त नहीं है। आपको उस मशीन पर ODP.Net इंस्टॉल करने की आवश्यकता है जिसे इसका उपयोग करने की आवश्यकता है: असल में इंस्टॉलेशन बस कुछ रजिस्ट्री प्रविष्टि बनाता है, और उनमें से एक सही ऑरैकल डायर को इंगित करता है (जिसमें पुस्तकालय आवश्यक होने पर tnsnames को ढूंढ सकता है)।

मॉरोवर, जैसा कि किसी ने इंगित किया है, आपको एक tnsnams फ़ाइल की आवश्यकता नहीं है। आप कनेक्शन स्ट्रिंग के अंदर आवश्यक सब कुछ लिख सकते हैं। यहाँ एक मैं अपने वातावरण में उपयोग करें:

Data Source= (DESCRIPTION = 
     (ENABLE = BROKEN) 
     (ADDRESS_LIST = 
     (LOAD_BALANCE = ON) 
     (FAILOVER = ON) 
     (ADDRESS = (PROTOCOL = TCP)(Host =por10srv-a)(Port = 1521)) 
    ) 
     (CONNECT_DATA = 
     (SERVICE_NAME = por10.gruppo.autostrade.it) 
     (FAILOVER_MODE = 
     (TYPE = SELECT) 
     (METHOD = BASIC) 
     (RETRIES = 10) 
     (DELAY = 3) 
    ) 
    ) 
    );User ID=npa_collaudo;Password=npa_collaudo; 
+0

अच्छा .. मुझे लगता है कि ओडीपी.NET स्थापित करना जरूरी नहीं है। मैं था .. मैं इसे स्थापित करने से बचने की कोशिश कर रहा हूँ। लेकिन अब .. मुझे यकीन नहीं है – Marshall

+0

दान एंड्रयूज के जवाब पर मेरी टिप्पणी देखें। – Marshall

+0

यदि आप वर्कस्टेशंस कॉन्फ़िगरेशन पर भरोसा करना चाहते हैं तो आपको हमेशा TNSNAMES.ORA की आवश्यकता है ... मेरा अनुभव दिखाता है कि ऐसा करने का सबसे अच्छा तरीका पर्यावरण के माध्यम से लूप करना है। प्रविष्टियों और "\ .. \ Network \ ADMIN \ TNSNAMES" संलग्न करना है।ओआरए "इंस्टेंट क्लाइंट द्वारा उपयोग किए जाने वाले सही व्यक्ति को खोजने के लिए। यह पता लगाने का सबसे मूल्यवान तरीका प्रतीत होता है कि हम अभी तक उपयोग कर रहे हैं। – menssana

2

आपको ओडीपी.NET (या उस मामले के लिए ओरेकल क्लाइंट) स्थापित करने की आवश्यकता नहीं है क्योंकि आपके पास स्थानीय वितरित इनलाइन ऑरैक क्लाइंट के लिए आवश्यक डीएलएल हैं। आपके मामले में TNCNAMES.ORA फ़ाइल को आपके निष्पादन योग्य के रूप में उसी फ़ोल्डर में स्थित होना संभव है और आपका विशेष "इनलाइन ऑरैक क्लाइंट" इसे वहां से उठाएगा। अन्यथा आपके आवेदन के लिए स्थानीय ऑरैक क्लाइंट मशीन पर स्थापित किसी भी क्लाइंट से इसे लेने का प्रयास करेगा।

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