प्रदाता Oracle क्लाइंट के संस्करण के साथ संगत नहीं है


157

मैं अपने ASP.net प्रोजेक्ट पर Oracle ODP.NET 11g (11.1.0.6.20) इंस्टेंट क्लाइंट को डेटा प्रोवाइडर के रूप में उपयोग करने की कोशिश कर रहा हूं, लेकिन जब मैं aspx पेज चलाता हूं तो मुझे " प्रदाता संस्करण के साथ संगत नहीं है ओरेकल क्लाइंट का "एरर मैसेज"। किसी भी सहायता की सराहना की जाएगी।

मैंने Visual Studio 2005 में डेटा प्रदाता को संदर्भित किया है और पीछे का कोड इस तरह दिखता है:

using Oracle.DataAccess.Client;
..

OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
    "Data Source=MyOracleServerName;" +
    "Integrated Security=SSPI";
oOracleConn.Open();

//Do Something

oOracleConn.Close();

पृष्ठ की त्रुटि इस तरह दिखती है:

Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

Source Error: 
Line 21: 
Line 22: 
Line 23:             OracleConnection oOracleConn = new OracleConnection();
Line 24:             oOracleConn.ConnectionString =
Line 25:                 "Data Source=MyOracleServerName;" +

[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
   Oracle.DataAccess.Client.OracleInit.Initialize() +494
   Oracle.DataAccess.Client.OracleConnection..cctor() +483

Stack Trace: 
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
   Oracle.DataAccess.Client.OracleConnection..ctor() +0
   Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436

जवाबों:


91

मैं आगे इस समस्या को देख रहा हूं, और आपको बस ODP.Net के एक ही डाउनलोड किए गए संस्करण से सभी उपयुक्त DLL को हथियाने की जरूरत है और उन्हें आपके Exe फ़ाइल के समान फ़ोल्डर में डाल दिया है, क्योंकि ODP.Net फ़िश नहीं मिलाने के बारे में उधम मचाता है संस्करण संख्या।

मैंने समझाया है कि यह कैसे करना है: http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c यहाँ इसका सार है हालांकि:

  • ODP.Net डाउनलोड करें
  • फ़ाइल खोलना
  • इसमें सभी JAR को अनज़िप करें
  • पकड़ो इन dll है कि बस unzipped थे:
    • oci.dll ('oci.dll.dbl' से बदला गया)
    • Oracle.DataAccess.dll
    • oraociicus11.dll
    • OraOps11w.dll
    • orannzsbb11.dll
    • oraocci11.dll
    • ociw32.dll ('ociw32.dll.dbl' से बदला गया)
  • सभी सीएलएल को अपने सी # निष्पादन योग्य के समान फ़ोल्डर में रखें

4
आपके समाधान ने मेरे लिए काम किया - इससे पहले कि मैंने यह पाया आपके ब्लॉग की पोस्ट मिल गई। आप आदमी हो। धन्यवाद! :-) इसके अलावा, ODAC के नवीनतम संस्करण का उपयोग करते हुए, मुझे किसी भी JAR को अनज़िप करने की आवश्यकता नहीं थी ... .dll फाइलें मेरे ओरेकल होम में विभिन्न निर्देशिकाओं में स्थित थीं। एक साधारण विंडोज़ खोज ने उन्हें बहुत जल्दी बदल दिया।
पंडिंकस

10
इसके अलावा, मैं अपने डेवलपमेंट मशीन पर ODAC (11.2.0.1.2) के नवीनतम संस्करण का उपयोग कर रहा था, और मुझे जिन फ़ाइलों की आवश्यकता थी, वे थे: oci.dll, Oracle.DataAccess.dll, oraociei11.dll, OROpsyw.dll। जैसा कि क्रिस बताते हैं, वे आपके समान होने के नाते भी इसी तरह का विश्वास करते हैं। ;-)
पंडिंकस

1
नए संस्करण की तरह लगता है यह dll खोजने के लिए आसान बनाता है। महान! अब जब तक ओरेकल उन्हें एक साधारण डीएल में रोल नहीं करता है ...
क्रिस

क्रिस की रणनीति और पांडिंस्क के लाइब्रेरी सेट ने मेरे लिए काम किया। मैं PowerShell के माध्यम से oracle क्लाइंट को कॉल कर रहा हूं, इसलिए मैंने PowerShell निष्पादन योग्य निर्देशिका में लाइब्रेरी सेट की।
quillbreaker

1
आपको शायद इन दिनों C # प्रबंधित ड्राइवर का उपयोग करना चाहिए अगर आप :)
क्रिस

47

आपको शुरुआत के लिए यहाँ सभी x86 / x64 टॉक को "अनदेखा" करना चाहिए और इसके बजाय ODP.NET प्रबंधित ड्राइवर का प्रयास करें (यदि आप उपयोग कर रहे हैं। नेट v4 +)।

https://www.nuget.org/packages/Oracle.ManagedDataAccess/

https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/

ओरेकल ODP.net अप्रबंधित चालक बनाम प्रबंधित

सभी "अप्रबंधित" से बचें कि क्या DLL क्या वास्तुकला मुद्दों! : डी (लगभग समय ओरेकल)।

NuGet पैकेज (11g के लिए भी काम करता है):

यहां छवि विवरण दर्ज करें

पुरानी / मैनुअल विधि:

प्रबंधित पुस्तकालयों का उपयोग करने के लिए कैसे परिवर्तित करने के बारे में जानकारी के लिए :

  • सबसे पहले, यहाँ का एक बड़ा कोड तुलना है प्रबंधित बनाम अप्रबंधित : http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
  • सुनिश्चित करें कि आपने ODP.NET, प्रबंधित ड्राइवर Xcopy संस्करण केवल डाउनलोड किया है
  • डाउनलोड की गई ज़िप फ़ाइल से, अपने प्रोजेक्ट डायरेक्टरी में कॉपी और पेस्ट करें:
    • Oracle.ManagedDataAccessDTC.dll
    • Oracle.ManagedDataAccess.dll
  • Oracle.ManagedDataAccess.dll में संदर्भ जोड़ें
  • सुनिश्चित करें कि आपका exe दोनों dll के साथ जारी किया गया है ( VS2010 में एप्लिकेशन फ़ोल्डर में जोड़ा गया )

3
यह अच्छी खबर है कि ओरेकल के पास एक पूरी तरह से प्रबंधित ड्राइवर है। उस 100mb dll के आस-पास लगना एक वास्तविक बोझ है।
जफिन

1
प्रबंधित ड्राइवर मेरे लिए बहुत अच्छा काम करता है - मेरे पास इसके ऊपर जाने के बाद से कोई समस्या नहीं है / आप अपनी परियोजनाओं को AnyCPU आदि पर वापस सेट कर सकते हैं और यह बढ़िया काम करता है :)
Tod Thomson

5
बस इसलिए हर कोई जागरूक है, जबकि प्रबंधित प्रदाता अच्छा है, इसमें बहुत सारी विशेषताओं का अभाव है जो पूर्ण प्रदाता के लिए अनुमति देता है। अर्थात्, Oracle का एन्क्रिप्शन में बनाया गया है।
जस्टिन स्काइल्स

1
ओरेकल का प्रलेखन कम से कम कहने के लिए "बिखर" जाता है। यहाँ कुछ असमर्थित विधियों पर एक अच्छा लिंक दिया गया है । इसके अतिरिक्त, चालक स्वयं ही readmeकुछ सीमाएँ तय करता है।
जस्टिन स्काइल्स

2
प्रबंधित ड्राइवर का उपयोग अंतिम समाधान है! मुझे लगता है कि मैं एक प्रकार का बेमेल होने पर बिताया गया हर समय लगता है कि एक नाइटस्ट्रीम है
ettore ct

35

मैंने केवल .NET 2.0 (11.1.0.6.20) के लिए ओरेकल डेटा प्रदाता स्थापित किया है और मैंने ओरेकल इंस्टेंट क्लाइंट (11.1.0.6.0) को स्थापित नहीं किया है ।

मैंने इसे स्थापित किया और त्रुटि गायब हो गई!


3
क्या आप ग्राहक को स्थापित करने के बजाय केवल 4 त्वरित क्लाइंट DLL को अपने EXE के समान फ़ोल्डर में कॉपी कर सकते हैं? (ये फाइलें: oci.dll orannzsbb11.dll oraocci11.dll oraociicus11.dll)
क्रिस

2
@ क्रिस: हाँ, आप कर सकते हैं। मेरे अनुभव में, हालाँकि, आपको oci.dll, orannzsbb11.dll, oraociicus11.dll, oraops11w.dll, और oracle.dataaccess.dll
Pakman

मेरे लिए अन्य तरीके से - मैंने ग्राहक को स्थापित किया, लेकिन प्रदाता को नहीं
ईव।

33

यह 32 बिट ओरेकल क्लाइंट के खिलाफ 64 बिट .NET रनटाइम चलाने के कारण हो सकता है। यह तब हो सकता है जब आपका सर्वर आप 64 बिट पर ऐप चला रहा हो। यह 64 बिट रनटाइम के साथ .NET ऐप चलाएगा। आप अपने प्रॉजेक्ट पर CPU फ्लैग को 32bit रनटाइम में चलाने के लिए VS में सेट कर सकते हैं।


बस इसी में भाग गया। (32-बिट) परीक्षण एप्लिकेशन में काम किया, फिर IIS में गिर गया। 32-बिट में शामिल सभी असेंबली की आवश्यकता के बजाय, मैं 32-बिट AppPool में बदल गया।
anton.burger

22

आइए किसी प्रकार का सारांश बनाएं:

त्रुटि संदेश "प्रदाता ओरेकल क्लाइंट के संस्करण के साथ संगत नहीं है" कई कारणों से हो सकता है।

  • आपके पास कोई Oracle क्लाइंट स्थापित नहीं है। इस मामले में त्रुटि संदेश वास्तव में भ्रामक है।

    .NET के लिए ओरेकल डेटा प्रोवाइडर (ODP.NET, यानी फ़ाइल Oracle.DataAccess.dll) ओरेकल इंस्टेंट क्लाइंट में शामिल नहीं है, इसे अलग से इंस्टॉल करना होगा ( 32-बिट ओरेकल डेटा एक्सेस कंपोनेंट्स (ODAC) या 64-बिट ओरेकल डेटा एक्सेस कंपोनेंट्स से डाउनलोड करें) ODAC) डाउनलोड ) या आपको Oracle यूनिवर्सल इंस्टॉलर (OUI) में विकल्प के अनुसार चयन करना होगा।

    ध्यान दें, जब ओरेकल डेटा प्रदाता> = 12.1 स्थापित करते हैं, तो प्रदाता स्वचालित रूप से जीएसी में पंजीकृत नहीं होता है। आपको इसे मैन्युअल रूप से पंजीकृत करना होगा यदि आवश्यक हो, तो Oracle Doc 2272241.1 देखें ।

  • ODP.NET का संस्करण Oracle क्लाइंट के स्थापित संस्करण से मेल नहीं खाता है। आपको मामूली संस्करण संख्या भी जांचनी होगी! उदाहरण के लिए, Oracle.DataAccess.dllसंस्करण 4.112.3.0 ओरेकल क्लाइंट 11.2.0.4 के साथ संगत नहीं है । ODP.NET और Oracle क्लाइंट के संस्करणों को ध्यान से देखें। आप उपयोग कर सकते हैं sigcheck पर oraociei*.dllऔर / या OraOps*w.dllओरेकल क्लाइंट के संस्करण प्राप्त करने के।

    विभिन्न नंबरिंग योजना के बारे में पता होना। फ़ाइल संस्करण 4.112.3.0 साधन: .नेट फ्रेमवर्क संस्करण 4, ओरेकल रिलीज 11.2.0.3.x

    ODP.NET संस्करण "1.x", "2.x" और "4.x" हैं। ये नंबर Microsoft .NET फ्रेमवर्क संस्करणों 1.0.3705 / 1.1.4322, 2.0.50727 और 4.0.30319 से संबंधित हैं। संस्करण "1.x" Oracle क्लाइंट 11.1 तक उपलब्ध था। संस्करण "4.x" को Oracle क्लाइंट 11.2 के साथ पेश किया गया था

  • ODP.NET का आर्किटेक्चर (32 बिट या 64 बिट) आपके एप्लिकेशन आर्किटेक्चर से मेल नहीं खाता है। एक 32 बिट एप्लिकेशन केवल 32 बिट ओरेकल क्लाइंट / ओडीपी.नेट के साथ काम करता है क्रमशः 64 बिट के लिए 64 बिट ओरेकल क्लाइंट / ओडीपी.नेट की आवश्यकता होती है। (जब तक आप ODP.NET प्रबंधित ड्राइवर का उपयोग न करें )

  • .NET फ्रेमवर्क संस्करण मेल नहीं खाता। उदाहरण के लिए, यदि आप अपना आवेदन लक्ष्य .NET फ्रेमवर्क 2.0 के साथ संकलित करते हैं तो आप ODP.NET संस्करण 4.x का उपयोग नहीं कर सकते। .NET फ्रेमवर्क लक्ष्य संस्करण ODP.NET के संस्करण के बराबर या अधिक होना चाहिए।

  • के संस्करण Oracle.DataAccess.dllअपने विकास मशीन पर (यानी संस्करण है जो जबकि संकलन भरी हुई है) लक्षित मशीन पर संस्करण की तुलना में अधिक है।

  • ध्यान रखें कि जीएसीOracle.DataAccess.dll से लोड किया जा सकता है जो डिफ़ॉल्ट रूप से किसी भी स्थानीय रूप से प्रदान की गई फ़ाइल पर पूर्वता लेता है।

समाधान

  • ODP.NET प्रबंधित ड्राइवर का उपयोग करने पर विचार करें, इसे Oracle पेज: 64-बिट ओरेकल डेटा एक्सेस कंपोनेंट्स (ODAC) डाउनलोड से डाउनलोड किया जा सकता है । वहां आपको केवल Oracle.ManagedDataAccess.dllअपने एप्लिकेशन डायरेक्टरी में फाइल को कॉपी करना होगा, इसके अलावा कुछ और नहीं चाहिए। यह 32 बिट और 64 बिट दोनों के लिए काम करता है।

  • अपने में *.csproj, सम्मान। *.vbprojइस तरह ODP.NET को अपना संदर्भ संपादित करें:

    <Reference Include="Oracle.DataAccess">
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>

    जैसे गुणों की आवश्यकता होती है Version=...या processorArchitecture=...नहीं होती है। आपका आवेदन Oracle.DataAccess.dllचयनित आर्किटेक्चर और लक्ष्य .NET फ्रेमवर्क के आधार पर सही लोड करेगा (बशर्ते कि यह ठीक से स्थापित हो) -> 100% सत्यापित नहीं है

  • यदि आप ओरेकल क्लाइंट का लक्ष्य मशीन पर संस्करण नहीं जानते हैं (उदाहरण के लिए यह आपके ग्राहक की मशीन हो सकती है): ऊपर दिए गए डाउनलोड पृष्ठ पर जाएँ और Oracle डेटा एक्सेस घटकों का सबसे कम XCopy संस्करण डाउनलोड करें । ज़िप निकालें और Oracle.DataAccess.dllअपने स्थानीय मशीन में सिर्फ फ़ाइल कॉपी करें। अपने वीएस प्रोजेक्ट में इस (सबसे अधिक संभावना पुराने) DLL का संदर्भ लें। इस DLL का संस्करण ODP.NET का सबसे कम संस्करण है, जिसमें आपका एप्लिकेशन काम करेगा। जब आप अपना आवेदन चलाते हैं तो GAC में प्रकाशक नीति वास्तव में स्थापित संस्करण पर पुनर्निर्देशित होगी।

  • मुझे नहीं लगता कि सिंगल DLL लेना और उन्हें कुछ फ़ोल्डरों में कॉपी करना एक स्मार्ट तरीका है। यह एक "नग्न" मशीन पर काम कर सकता है लेकिन अगर आपकी लक्ष्य मशीन ने कोई ओरेकल उत्पाद स्थापित किया है तो संस्करण बेमेल के लिए उच्च जोखिम है। अपनी मशीन से किसी भी ओरेकल उत्पादों को अनइंस्टॉल करें और एक नई स्थापना करें। ओरेकल 11 जी (क्लाइंट) को कैसे अनइंस्टॉल / पूरी तरह से हटाने के लिए एक नज़र है ? यह वास्तव में साफ मशीन प्राप्त करने का आदेश देता है।

  • यदि आपको एक ही समय में 32 बिट और 64 बिट एप्लिकेशन के साथ काम करना है, तो एक मशीन पर दोनों संस्करणों को स्थापित करने के लिए इस निर्देश का पालन करें:

मान्यताओं: Oracle होम कहा जाता है OraClient11g_home1, क्लाइंट संस्करण 11gR2 है।

  • वैकल्पिक रूप से किसी भी स्थापित ओरेकल क्लाइंट को हटा दें

  • उदाहरण के लिए, Oracle x86 क्लाइंट डाउनलोड और इंस्टॉल करें C:\Oracle\11.2\Client_x86

  • उदाहरण के लिए, अलग-अलग फ़ोल्डर में Oracle x64 क्लाइंट डाउनलोड और इंस्टॉल करें C:\Oracle\11.2\Client_x64

  • कमांड लाइन टूल खोलें, फ़ोल्डर% WINDIR% \ System32 पर जाएं, आम तौर पर फ़ोल्डर के C:\Windows\System32लिए एक प्रतीकात्मक लिंक बनाएं (नीचे देखें)ora112C:\Oracle\11.2\Client_x64

  • बदलें करने के लिए फ़ोल्डर% WINDIR% \ SysWOW64, आम तौर पर C:\Windows\SysWOW64और एक प्रतीकात्मक लिंक बनाने ora112फ़ोल्डर में C:\Oracle\11.2\Client_x86, (नीचे देखें)

  • संशोधित PATHवातावरण चर, जैसे सभी जानकारी को बदलें C:\Oracle\11.2\Client_x86और C:\Oracle\11.2\Client_x64से C:\Windows\System32\ora112संबंधित उनके \binसबफ़ोल्डर। नोट: C:\Windows\SysWOW64\ora112PATH वातावरण में नहीं होना चाहिए।

  • अगर जरूरत सेट yor ORACLE_HOMEपर्यावरण चर करने के लिएC:\Windows\System32\ora112

  • अपना रजिस्ट्री संपादक खोलें। रजिस्ट्री मान सेट HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOMEकरने के लिएC:\Windows\System32\ora112

  • रजिस्ट्री मान HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOMEको C:\Windows\System32\ora112(नहीं C:\Windows\SysWOW64\ora112) पर सेट करें

  • आप कर चुके हैं! अब आप x86 और x64 ओरेकल क्लाइंट का एक साथ उपयोग कर सकते हैं, अर्थात एक x86 एप्लिकेशन x86 पुस्तकालयों को लोड करेगा, एक x64 अनुप्रयोग आपके सिस्टम पर किसी भी अन्य संशोधन के बिना x64 पुस्तकालयों को लोड करता है।

प्रतीकात्मक लिंक बनाने की आज्ञा देता है:

cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86

कुछ नोट:

  • दोनों प्रतीकात्मक लिंक का नाम समान होना चाहिए, जैसे ora112

  • यदि आप ODP.NET को मैन्युअल रूप से बाद में स्थापित करना चाहते हैं, तो स्थापना के लिए उपयुक्त फ़ोल्डरों का चयन करने का ध्यान रखें।

  • उनके नामों के बावजूद फ़ोल्डर C:\Windows\System32में x64 लाइब्रेरीज़ हैं, जबकि C:\Windows\SysWOW64x86 (32-बिट) लाइब्रेरीज़ हैं। भ्रमित मत हो।

  • उदाहरण के लिए, अपने TNS_ADMINपर्यावरण चर ( TNS_ADMINरजिस्ट्री में प्रविष्टियाँ) को एक सामान्य स्थान पर सेट करना एक बुद्धिमान विकल्प है TNS_ADMIN=C:\Oracle\Common\network


इस IMO में वास्तविक उत्तर की तुलना में अधिक ज्ञान है। इसलिए यदि मेरे पास .net 4 के लिए x86 एप्लिकेशन है और डेटाबेस संस्करण 9i में है, तो उपयोगकर्ता को 32 या 64-बिट विंडोज होने पर किस क्लाइंट संस्करण की आवश्यकता होगी? Oracle का कहना है कि कोई भी क्लाइंट संस्करण किसी भी db संस्करण के साथ संगत है। क्या 32-बिट उपयोगकर्ताओं के साथ उत्तर 32-बिट संस्करण स्थापित करता है और 64-बिट उपयोगकर्ता 64-बिट संस्करण स्थापित करते हैं और ODP.NET प्रबंधित ड्राइवर का उपयोग करके यह तय करते हैं कि यह किस ओएस से बात कर रहा है?
चमकदार

1
जब आप ODP.NET प्रबंधित ड्राइवर का उपयोग करते हैं तो किसी भी ओरेकल क्लाइंट को स्थापित करने की आवश्यकता नहीं होती है - इसका मुख्य लाभ यह है। यह x86 और x64 दोनों अनुप्रयोगों के साथ काम करता है। "ODP.NET प्रबंधित ड्राइवर" के बिना एक x86 अनुप्रयोग के लिए भी x86 (यानी 32-बिट) Oracle क्लाइंट की आवश्यकता होती है, कोई फर्क नहीं पड़ता कि डेटाबेस सर्वर आर्किटेक्चर क्या है।
वर्नफ्राइड डॉमशेकिट

मैं सिर्फ "Microsoft Visual C ++ 2010 में चला गया था" पुनर्वितरण स्थापित करने की आवश्यकता है - आपको इसे अपने सारांश में जोड़ना चाहिए।
जय सुलिवन

1
मुझे नहीं लगता कि यह त्रुटि Oracle या ODP.NET द्वारा संबंधित या कारण है
Wernfried Domscheit

यह मेरे लिए काम करता है, मैं Oracle.DataAccess.dllनगेट पैकेज से स्थापित करता हूं Oracle.DataAccess.x86, और इसका डीएलएल संस्करण है 2.112.1.0, इसलिए मैं ओरेकल क्लाइंट को संस्करण के साथ स्थापित करता हूं Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64) यहां संस्करण - समस्या हल हो गई है!
यू यांग जियान

6

कई घंटों की समस्या निवारण के बाद, मुझे अपनी परियोजनाओं बिन निर्देशिका में Oracle.DataAccess.dll (v4.0) होने के कारण यह समस्या मिली, लेकिन रनटाइम GAC से Oracle.DataAccess.dll (v2.x) भी लोड कर रहा है। प्रोजेक्ट संदर्भ में Oracle.DataAccess प्रविष्टि को निकालना और पढ़ना मेरे लिए समस्या का हल है।

यहाँ उल्लेखित अन्य फाइलें मेरी स्थिति में आवश्यक प्रतीत नहीं हुईं।

अपडेट करें

"प्रदाता ओरेकल क्लाइंट के संस्करण के साथ संगत नहीं है" का मूल कारण है "त्रुटि (आम तौर पर) है कि प्रबंधित विधानसभा अप्रबंधित पुस्तकालयों को लोड करने का प्रयास कर रही है जो संस्करणों से मेल नहीं खाते हैं। ऐसा प्रतीत होता है कि आप Oracle ड्राइवर को web.config 1 में पुस्तकालय पथ निर्दिष्ट करके सही पुस्तकालयों का उपयोग करने के लिए बाध्य कर सकते हैं

<configuration>
  <oracle.dataaccess.client>
    <settings>
      <add name="DllPath" value="C:\oracle\bin"/>
      <!-- ... -->
    </settings>
  </oracle.dataaccess.client>
</configuration>

धन्यवाद! आपका समाधान मुझे यह विचार देता है कि 2 दिनों के बाद काम करें (मेरे पास विजुअल स्टूडियो 2010 नेट 4, ओरेकल 10 जी क्लाइंट है) ... मुझे जीएसी दिखाई देता है और निश्चित रूप से मैंने ओरेकल के 3 स्टैंड स्थापित किए हैं। DataAccess.dll, मैंने सभी को अनइंस्टॉल किया (और "DbProviderFactories") में अमान्य मशीन.कॉन्फ़िग कीज़ को हटा दें, और केवल ODAC1120320 x64 को फिर से स्थापित करें। और यह काम करता है।
हरनल्डो गोंजालेज

5

लक्ष्य मशीन पर ODP.Net स्थापित करें और इसे समस्या को हल करना चाहिए ... dll की प्रतिलिपि बनाना एक अच्छा विचार नहीं है ...


5

Oracle 11g (11.1.0.7.20) के लिए मुझे अपने Exe के साथ काम करने के लिए निम्नलिखित dll जोड़ना होगा।

  1. oci.dll
  2. OraOps11w.dll
  3. oraociicus11.dll (30mb के करीब बहुत बड़ा)
  4. Oracle.DataAccess.dll

आप 130 एमबी
एल्म्यू

2

यह मुझे प्रतीत होगा कि यद्यपि आपके पास ओरेकल इस्टैंट क्लाइंट के साथ ओडीपी है, ओडीपी इसके बजाय वास्तविक ओरेकल क्लाइंट का उपयोग करने का प्रयास कर सकता है। क्या आपके पास मशीन पर एक मानक ओरेकल क्लाइंट स्थापित है? मुझे याद है कि जब यह एक ही मशीन पर कई ग्राहकों के लिए आया था तो ओरेकल काफी अशिष्ट था।


2

मेरे साथ भी ठीक यही समस्या थी। मैंने एप्लिकेशन को संकलित करने के बाद oraociei11.dll हटा दिया (और भूल गया कि मैंने हटा दिया था)। और इसे अंजाम देने की कोशिश करते हुए यह त्रुटि दे रहा था। इसलिए जब यह da उस oraociei11.dll को नहीं खोज पाएगा, तो यह इस त्रुटि को दर्शाता है। जब यह त्रुटि देता है तो अन्य मामले भी हो सकते हैं, लेकिन यह उनमें से एक है।


2

IIS एप्लिकेशन पूल भी देखें 32-बिट सही या गलत ध्वज सक्षम करें, जब आप इस संदेश को देखते हैं, तो कुछ ओरेकल फोरम ने मुझे इसके लिए निर्देशित किया है!


2

मैं एक ही समस्या है, लेकिन मेरे मामले में मैं सिर्फ बिन फ़ोल्डर में dlls कॉपी नहीं कर सकते हैं, तो मैं केवल विधानसभा संस्करण 'रिबंड'।

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>    
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral"/>
        <bindingRedirect oldVersion="2.112.2.0" newVersion="2.112.1.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

2

इस समस्या को हल करने के लिए मैंने ऐसा किया जो 3 घंटे तक बना रहा:

  1. ओरेकल स्थित घर के नीचे C:\oracle\product\11.2.0मेरे पास एक फ़ोल्डर client_1था, जहां मैंने पहले ODP.NETविंडोज 64 बिट्स के लिए बिट्स स्थापित किया था ।

  2. बाद में विज़ुअल स्टूडियो 2012 के साथ मेरे ASP.NET वेब एपीआई ऐप को डीबग करने की कोशिश करते हुए, मुझे यह त्रुटि संदेश मिलता रहा: प्रदाता ओरेकल क्लाइंट के संस्करण के साथ संगत नहीं है

  3. Google पर खोज करने पर मैंने पाया कि ऐसा इसलिए हो रहा था क्योंकि मैं ODP.NET64 बिट्स का उपयोग कर रहा था । फिर मैंने ODP.NETविंडोज 32 बिट्स के लिए पकड़ा और इसे स्थापित किया लेकिन मुझे वही त्रुटि संदेश मिलता रहा।

  4. समाधान: फ़ोल्डर को हटा दिया गया client_1और ODP.NET32 बिट्स को पुनर्स्थापित किया गया । कुछ हद तक इंस्टॉलर 32 बिट संस्करण के साथ 64 बिट संस्करण से बिट्स को मिला रहा था। जाओ पता लगाओ...

  5. अब मैं फिर से खुश हूं और एक नई शुरुआत कर सकता हूं OracleConnection। आखिरकार! :)


2

किसी के लिए भी यह समस्या अभी भी है: इस लेख के आधार पर

http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html

मुझे पता चला कि मेरा सर्वर Microsoft C ++ विज़ुअल रनटाइम लाइब्रेरी को याद कर रहा था - विजुअल स्टूडियो स्थापित होने के कारण मैंने इसे अपने देव मशीन पर रखा था। मैंने यहां से लाइब्रेरी के सबसे हाल के संस्करण को (वर्तमान में) डाउनलोड और इंस्टॉल किया है:

http://www.microsoft.com/en-us/download/details.aspx?id=13523

सेटअप को रन किया और C # से ओरेकल कॉल किया!


1
यार .... ओरेकल .... क्या हमारी थोड़ी चर्चा हो सकती है? इधर आओ, कोने में। सुनो आदमी, मैंने सारा दिन यह पता लगाने में बिताया कि नरक "प्रदाता संगत नहीं" क्या मतलब है, केवल बाद में पता लगाना था कि यह है क्योंकि कुछ स्थापना निर्भरता को पूरा नहीं किया गया था। कृपया - नहीं - मैं मांग करता हूं कि आप अपने इंस्टॉलर की स्थापना के समय इन निर्भरताओं की जांच करें , और अगर यह पूरा नहीं हुआ तो उपयोगकर्ता को चेतावनी दें । धन्यवाद।
जय सुलिवन

3
वैसे, मुझे कई मौकों पर इस स्टैकओवरफ्लो प्रश्न पर वापस आना पड़ा है, और हर बार एक अलग उत्तर मेरे लिए लागू होता है। इससे समय और धन की कितनी बर्बादी हुई है।
जय सुलिवन

2

TLDR संस्करण:

  • इसके बजाय 12c 100% प्रबंधित प्रदाता का उपयोग करें।
  • यदि आपको पुराने प्रदाता का उपयोग करना चाहिए, तो आपको OracleDataAccess.dll को अनवांटेड Oracle क्लाइंट Dlls में इंगित करना होगा जो सही संस्करण के हैं। यदि आपके पास आपकी मशीन पर कई ओरेकल ग्राहक स्थापित हैं जो शायद आपके लिए "DllPath" कॉन्फ़िगरेशन चर (नीचे देखें) सहित एक साधारण एप्लिकेशन कॉन्फ़िगरेशन में हैं, लेकिन आपको इंगित करने के लिए एक नया oracle क्लाइंट स्थापित करने की भी आवश्यकता हो सकती है।

पूर्ण संस्करण:

सबसे पहले, हमें यह सुनिश्चित करने देता है कि हम पुराने अनमैन्ड प्रदाता (नए 12 सी 100% प्रबंधित प्रदाता) के घटकों को समझें। यह दो टुकड़ों से बना है:

  1. प्रबंधित .net घटक - Oracle.DataAccess.dll
  2. अप्रबंधित (गैर-.net) ग्राहक

सीधे शब्दों में, Oracle.DataAccess.dll लगभग बस एक आवरण है, जो अप्रबंधित क्लाइंट के लिए ORACLE-NET निर्देशों में .net निर्देश का अनुवाद करता है।

उस ने कहा, जब आप Oracle.DataAccess को लोड करते हैं, तो एक ऐसा क्रम होता है जिसमें यह अप्रबंधित क्लाइंट dll को खोजने की कोशिश करता है जिसकी उसे आवश्यकता होती है। से ओरेकल प्रलेखन :

Oracle.DataAccess.dll निम्न क्रम के आधार पर आश्रित अप्रबंधित DLL (जैसे Oracle ग्राहक) के लिए खोज करता है:

1. आवेदन या निष्पादन योग्य का अप्रत्यक्ष।

2. आवेदन विन्यास या web.config द्वारा निर्दिष्ट DllPath सेटिंग।

3.DllPath सेटिंग मशीन द्वारा निर्दिष्ट ।config।

4. Windows रजिस्ट्री द्वारा निर्दिष्ट DllPath सेटिंग।

HKEY_LOCAL_MACHINE \ सॉफ्टवेयर \ ओरेकल \ ODP.NET \ संस्करण \ DllPath

5. विंडोज पथ पर्यावरण चर द्वारा निर्दिष्ट अप्रत्यक्ष।

तो आपके मामले में, आपके ऐप ने इस प्रक्रिया को ऊपर रखा है और एक ऐसा रास्ता खोजा है जिसमें मानव रहित dlls हैं जो Oracle.DataAccess.dll असेंबली के सापेक्ष बहुत पुराने हैं जो आप उपयोग कर रहे हैं।

यह सिर्फ इतना हो सकता है कि उस मशीन पर केवल ओरेकल क्लाइंट इंस्टॉल हो, वह बहुत पुराना है। लेकिन यह खेलने में आता है यदि आपके पास मशीन पर एक से अधिक क्लाइंट स्थापित हैं और अनमैनेज की गई फाइलें पहले एक अलग लेकिन पुराने इंस्टॉलेशन में पाई गई थीं। यदि बाद में, सरल कार्य करने के लिए अपने कॉन्फ़िगरेशन में dllPath कॉन्फ़िगरेशन चर का उपयोग करें और इसे सही Oracle होम बिन फ़ोल्डर में इंगित करें:

<configuration>
  <oracle.dataaccess.client> 
    <add key="DllPath" value="c:\oracle\product\1.1.0-xcopy-dep\BIN"/>
  </oracle.dataaccess.client>
</configuration>

यदि आप क्लाइंट की एक नई प्रति स्थापित करना चाहते हैं, तो xcopy संस्करण सबसे छोटा है और इसमें "इंस्टेंट क्लाइंट" है और DllPath को इस नए स्थान पर इंगित करें। लेकिन कोई भी oracle क्लाइंट इनस्टॉल काम करेगा।

लेकिन अगर आप इन सभी अनवांटेड क्लाइंट रिज़ॉल्यूशन स्टफ से बचना चाहते हैं, तो देखें कि क्या आप अपने ऐप को 100% प्रबंधित प्रदाता के बजाय अपडेट करने के लिए अपडेट कर सकते हैं - यह अमूर्त फ़ाइलों पर किसी भी निर्भरता के बिना, बस एक या दो प्रबंधित असेंबली है।

यह भी संभव है कि आप Oracle.DataAccess.dll को लोड नहीं कर रहे हैं जो आपको लगता है कि आप कर रहे हैं यदि यह आपके बिन निर्देशिका और आपके GAC दोनों में स्थापित है, लेकिन मुझे लगता है कि कम संभावना है कि senario। देखें विधानसभा संकल्प प्रक्रिया में अधिक जानकारी के लिए।


1

क्या IIS / IWAM उपयोगकर्ता को Oracle निर्देशिका पर अनुमति है? क्या आप एक्सेल या एक्सेस जैसे किसी अन्य ऐप का उपयोग करके इस डेटा स्रोत से जुड़ सकते हैं?


1

हमें एक ही समस्या थी, क्योंकि एक नेटवर्क शेयर पर Oracle.Data.dll असेंबली को हमारे DBA द्वारा अपडेट किया गया था। परियोजना से संदर्भ हटाकर, और इसे फिर से जोड़ने से समस्या हल हो गई।


1

इस समस्या को हल करने के लिए सिर्फ दो चरण।

  1. एप्लिकेशन पूल की अग्रिम सेटिंग पर जाएं और True पर '32 बिट एप्लिकेशन सक्षम करें' ध्वज सेट करें।
  2. सुनिश्चित करें कि आपके बिन के सभी Dll अब 32 बिट संस्करण हैं ...

शुभकामनाएँ।


@ मज़हर-अब्बास, क्या आप pls कर सकते हैं। इंगित करें कि मैं 32 बिट एप्लिकेशन सक्षम कर सकता हूं? यह IIS या प्रोजेक्ट में है?
hiFI

1

मैं नई DLL पाने की सड़क से नीचे नहीं गया। हमारे पास मौजूदा परियोजनाओं का एक समूह था जो पूरी तरह से ठीक काम करते हैं और यह केवल मेरी नई परियोजना थी जो मुझे सिरदर्द दे रही थी इसलिए मैंने कुछ और करने की कोशिश करने का फैसला किया।

मेरी परियोजना एक आंतरिक रूप से विकसित आंतरिक .ll का उपयोग कर रही थी जो कि Oracle.DataAccess.dll पर निर्भर थी v4.112.3.0। किसी कारण से, जब प्रकाशन, विजुअल स्टूडियो हमेशा अपलोड होता हैv4.121.0.0 , भले ही यह किसी भी फाइल में स्पष्ट रूप से निर्दिष्ट नहीं था। इसलिए मुझे त्रुटि हो रही थी।

तो मैंने क्या किया:

  1. सफलतापूर्वक मेरे वेब साइट के लिए चल रही परियोजनाओं में से एक से आंतरिक /bin(सभी सुरक्षित पक्ष पर होना)।
  2. सफलतापूर्वक मेरे वेब साइट पर चलने वाली परियोजनाओं में से एक से Oracle.DataAccess.dll की प्रतिलिपि बनाई गई /bin
  3. मेरी वेब साइट से उन दोनों का संदर्भ जोड़ें।
  4. अंत में Oracle.DataAccess संदर्भ में दिखाया गया myWebSite.csproj, लेकिन इसने गलत संस्करण दिखाया: v4.121.0.0इसके बजाय v4.112.3.0
  5. मैंने मैन्युअल रूप से संदर्भ को बदल दिया है myWebSite.csproj, इसलिए यह अब पढ़ा है:

    <Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\Oracle.DataAccess.dll</HintPath>
    </Reference> 

2
यह एक बिन फ़ोल्डर में dlls के लिए एक संदर्भ जोड़ने के लिए एक बहुत बुरा विचार है।
जय सुलिवन

1
binऔर objफ़ोल्डर हैं उत्पादन फ़ोल्डरों; यह वह जगह है जहाँ dlls जाते हैं जब आप अपना प्रोजेक्ट बनाते हैं। आपको संघर्ष पैदा किए बिना किसी भी समय इन फ़ोल्डरों को हटाने में सक्षम होना चाहिए। आमतौर पर इन फ़ोल्डरों को स्रोत नियंत्रण में अनदेखा किया जाता है। मानक अभ्यास एक External Referencesफ़ोल्डर बनाना है जहां आप अपने संदर्भित डीएलएस डालते हैं।
जय सुलिवन

@ नोट सही लगता है। इसे मेरे दिमाग पर रखेंगे।
रोबॉट्रॉन

जैसा कि नाम दिया गया है यह केवल संकलक के लिए एक संकेत मार्ग है, न कि एक मजबूर संदर्भ। पहले GAC को Oracle.DataAccess.dll के लिए खोजा जाता है। यदि आप HintPathपूरी तरह से हटाते हैं तो भी यह काम करना चाहिए ।
वर्नफ्रीड डोमशेट

1

दृश्य स्टूडियो 2015 के लिए ओरेकल डेटा उपकरण स्थापित करने के बाद मुझे इस समस्या का सामना करना पड़ा, और फिर अच्छे घंटे के लिए ओरेकल के साथ लड़ रहा था। मैंने फाइल कॉपी, कॉन्फिग चेंज आदि के साथ इस गड़बड़ी के बजाय फिर से ओरेकल क्लाइंट को फिर से स्थापित करने का प्रयास करने का फैसला किया और मेरे लिए काम किया।


1

मुझे एक समान समस्या का सामना करना पड़ा और मूल कारण यह था कि GAC के 2 oracle.dataaccess संस्करण थे अर्थात v4.0_4.112.2.0 और v4.0_4.112.4.0। मेरा आवेदन v4.0_4.112.2.0 का जिक्र कर रहा था, इसलिए जब मैंने जीएसी से v4.0_4.112.4.0 निकाला, तो यह ठीक काम कर गया।

GAC पथ: C: \ Windows \ Microsoft.NET \ विधानसभा \ GAC_64 \ Oracle.DataAccess

इससे पहले : यहां छवि विवरण दर्ज करें

उपरांत : यहां छवि विवरण दर्ज करें

एक संस्करण को निकालने के लिए, कोई व्यक्ति जीएसी से संबंधित फ़ोल्डर को हटा सकता है।


0

हाल ही में मुझे एक पुरानी परियोजना पर काम करना था जहाँ समाधान और सभी सम्‍मिलित परियोजनाओं को x32 मंच पर लक्षित किया गया था। मैं Oracle.DataAccess.dll और अन्य सभी स्थानों पर Oracle फ़ाइलों का सुझाव देने की कोशिश करता रहा, लेकिन हर बार दीवार से टकराया। अंत में सिर में बल्ब जलाया गया (8 घंटे के बाद :)), और स्थापित ODAC असेंबली और उनके प्लेटफॉर्म के लिए जांच करने के लिए कहा। मेरे पास सभी 64-बिट (x64) ODAC क्लाइंट पहले से ही स्थापित थे लेकिन 32 बिट्स (x32) नहीं थे। 32-बिट ODAC स्थापित किया और समस्या गायब हो गई।

स्थापित ODAC के संस्करण की जांच कैसे करें: फ़ोल्डर C: \ Windows \ विधानसभा में देखें। "प्रोसेसर आर्किटेक्चर" संपत्ति स्थापित ओडीएसी के मंच को सूचित करेगी।

बल्ब को प्रकाश में आने में आठ घंटे का लंबा समय है। कोई आश्चर्य नहीं कि मुझे हमेशा काम पर नारा लगाना पड़ता है :)।


ध्यान दें, C:\Windows\assembliesबस .NET फ्रेमवर्क संस्करण 2.0 तक असेंबली दिखाता है। संस्करण 3.x / 4.x प्रदर्शित नहीं होते हैं, देखें stackoverflow.com/questions/28213105/…
Wernfried Domscheit

0

क्रिस के समाधान ने मेरे लिए भी काम किया। मुझे हालांकि एक त्रुटि संदेश मिला है जिसमें कहा गया है:

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

जाहिरा तौर पर, विदेशी भाषा में, इसका मतलब है कि आपका कार्यक्रम या तो सभी प्लेटफार्मों, या 32-बिट मशीनों को लक्षित कर रहा है। बस प्रोजेक्ट गुण में अपना लक्ष्य प्लेटफ़ॉर्म 64-बिट में बदलें और सर्वश्रेष्ठ के लिए आशा करें।


3
यह वास्तव में .NET है, न कि Oraclish
Jay Sullivan

0

मेरे पास Oracle.DataAccess.dll v4.121.2.0 के साथ एक ही मुद्दा था। 2- घरों की स्थापना (32 और 64 बिट संस्करण) के साथ। 32-बिट संस्करण वर्कर, 64-बिट संस्करण नहीं।

मेरे मामले में (2 दिनों के प्रयास के बाद) मैंने पाया कि समस्या 64-बिट-होम संस्करण पर अनुमतियाँ थी। कई निर्देशिकाएँउस संस्करण में ने विशेष रूप से अनुमत अनुमतियाँ प्राप्त की थीं जहाँ "प्रामाणिक उपयोगकर्ताओं" की भूमिका में "पढ़ें" एक्सेस नहीं था, जो कि मूल निर्देशिका पर डिफ़ॉल्ट रूप से सेट है। उन उप-निर्देशिकाओं में "बिन", "नेटवर्क / व्यवस्थापक", "nls", "oracore", "RDBMS" और संभवतः अन्य शामिल थे। मैं उन्हें "प्रक्रिया मॉनिटर" (Procmon.exe) systernternals से उपयोगिता में "पहुंच अस्वीकृत" परिणाम को फ़िल्टर करके पाया। एक बार पेरेंट डायरेक्टरी से उन बाल उपनिर्देशिकाओं को अनुमति मिल गई तो सब कुछ काम करने लगा।

मैंने पूरे oracle home पर अनुमतियों को ओवरराइड करने के लिए क्या किया था इसलिए मैंने उन्हें एक समय में एक निर्देशिका नहीं दी, लेकिन मुझे लगता है कि यदि आप सुरक्षा के बारे में चिंता नहीं करते हैं तो आप इसे पूरे संबंधित oracle होम निर्देशिका पर रीसेट कर सकते हैं।


-1
  • 64-बिट मशीन पर, आपके आवेदन के लिए बिन निर्देशिका में C: \ Windows \ SysWOW64 से "msvcr71.dll" कॉपी करें।
  • 32-बिट मशीन पर, आपके आवेदन के लिए बिन निर्देशिका में C: \ Windows \ System32 से "msvcr71.dll" कॉपी करें।

http://randomdevtips.blogspot.com/2012/06/provider-is-not-compatible-with-version.html


-3

यहाँ बहुत सारे सैद्धांतिक उत्तर दिए गए हैं, लेकिन यहाँ कोड के साथ एक कार्यशील उदाहरण दिया गया है जिसे आप कॉपी और पेस्ट कर सकते हैं और तुरंत परीक्षण कर सकते हैं:

  1. मैंने Oracle Express डेटाबेस OracleXE112 स्थापित किया है जो पहले से ही कुछ प्रीइंस्टॉल्ड डेमो टेबल के साथ आता है।
  2. जब आप इंस्टॉलर शुरू करते हैं तो आपसे पासवर्ड मांगा जाता है । मैंने पासवर्ड के रूप में "xxx" दर्ज किया। (उत्पादन में उपयोग नहीं किया गया)
  3. मेरा सर्वर 192.168.1.158 मशीन पर चलता है
  4. सर्वर पर आपको Windows फ़ायरवॉल में TNSLSNR.exe प्रक्रिया के लिए स्पष्ट रूप से एक्सेस की अनुमति देनी चाहिए । यह प्रक्रिया पोर्ट 1521 पर सुनती है। यदि आपको नीचे दिए गए कोड से टाइमआउट की त्रुटि मिलती है, तो अपने फ़ायरवॉल की जांच करें।
  5. विकल्प A: C # (.NET2 या .NET4) के लिए आप ODAC11 डाउनलोड कर सकते हैं , जिसमें से आपको अपनी परियोजना में Oracle.DataAccess.dll जोड़ना होगा। इसके अतिरिक्त यह DLL इस पर निर्भर करता है: OROps11w.dll, oci.dll, oraociei11.d.d (130MB!), Msvcr80.dll। ये DLLs EXE रूप में एक ही निर्देशिका में होना चाहिए या आप में DLL पथ उल्लेख करना होगा: HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath। 64 बिट मशीनों पर इसके अतिरिक्त लिखते हैंHKLM\SOFTWARE\Wow6432Node\Oracle\...
  6. विकल्प B: यदि आपने ODAC12 डाउनलोड किया है, तो आपको Oracle.DataAccess.dll , OROps12w.dll, oci.dll, oraociei12.dll (160MB!), Oraons.dll, msvcx100.dll की आवश्यकता होगी। रजिस्ट्री रास्ता हैHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
  7. विकल्प C: यदि आप 100 एमबी से अधिक के विशाल DLL नहीं चाहते हैं, तो आपको ODP.NET_Managed12.xxxxxxxx.zip डाउनलोड करना चाहिए, जिसमें आप पाते हैं Oracle.ManagedDataAccess.dllकि जो केवल 4 MB का है और एक शुद्ध प्रबंधित DLL है जो 32 बिट और 64 बिट प्रक्रियाओं में काम करता है के रूप में अच्छी तरह से और कोई अन्य DLL पर निर्भर करता है और किसी भी रजिस्ट्री प्रविष्टियों की आवश्यकता नहीं है।
  8. निम्नलिखित C # कोड मेरे लिए सर्वर साइड पर किसी भी विन्यास के बिना काम करता है (बस डिफ़ॉल्ट स्थापना):
Oracle.DataAccess.Client का उपयोग करना;
या
Oracle.ManagedDataAccess.Client का उपयोग करना;

....

स्ट्रिंग oradb = "डेटा स्रोत = (विवरण ="
    + "(ADDRESS_LIST = (ADDRESS = = PROTOCOL = TCP) (HOST = 192.168.1.158) (पोर्ट = 1521))"
    + "(CONNECT_DATA = (SERVER = DEDICATED)));"
    + "उपयोगकर्ता आईडी = प्रणाली; पासवर्ड = xxx?";

का उपयोग कर (OracleConnection con = new OracleConnection (oradb)) 
{
    conn.Open ();
    का उपयोग कर (OracleCommand cmd = new OracleCommand ())
    {
        cmd.Connection = कॉन;
        cmd.CommandText = "DBA_DATA_FILES से TABLESPACE_NAME का चयन करें";

        उपयोग (OracleDataReader dr = cmd.ExecuteReader ())
        {
            जबकि (dr.Read) ()
            {
                listBox.Items.Add (डॉ [ "TABLESPACE_NAME"]);
            }
        }
    }
}

जब आप सिर्फ एक रनिंग क्लाइंट की आवश्यकता होती है, तो पूरे ओरेकल डेटाबेस सर्वर को स्थापित करने के लिए एक बहुत अधिक ओवरकिल।
वर्नफ्राइड डॉमशेकिट

आप जवाब दें वैसे भी गरीब हैं। किसी भी Oracle dll को एप्लिकेशन डायरेक्टरी में कॉपी करने की कोई आवश्यकता नहीं है क्योंकि डिफ़ॉल्ट इंस्टॉलेशन द्वारा आप उन्हें AT PATH% (जब तक आप इसे अपने आप से संशोधित नहीं करते हैं) के माध्यम से ढूंढते हैं। Registy hint केवल for.version 4.x पर लागू होता है और केवल इसके लिए काम करता है 32-बिट ओरेकल क्लाइंट। हालांकि मिसमैचर्स 32-बिट बनाम 64-बिट इस सवाल का मुख्य विषय है।
वर्नफ्रीड डम्सचेइट

आप टिप्पणी करते हैं कि आपने मेरा उत्तर नहीं पढ़ा है। यदि मैं एक ऐसा एप्लिकेशन लिखना चाहता हूं जो ओरेकल सर्वर के साथ संचार करता है तो ओरेकल से कुछ भी स्थापित करने की आवश्यकता नहीं है। मैं सिर्फ उपर्युक्त DLL का उपयोग करता हूं और अपने आवेदन के साथ इसे वितरित करता हूं। तो अंत-उपयोगकर्ता की मशीन पर पैट चर में कुछ भी नहीं होगा। जिस तरह से PATH वैरिएबल (जो 1980 से पुराने DOS की उम्र से आता है) का उपयोग करके आधुनिक सॉफ्टवेयर में उच्च पदावनत किया जाता है। मेरा जवाब विकल्प सी की सिफारिश करता है जिसे किसी भी रजिस्ट्री पथ की आवश्यकता नहीं है और 32 या 64 बिट पर निर्भर नहीं करता है। मैंने विकल्प A और B का उल्लेख केवल पूर्णता के लिए किया है।
एल्म्यू

मुझे लगता है कि उचित विंडोज के बिना आपके विंडोज को सेट करने में PATH% काम नहीं करेगा - यहां तक ​​कि संस्करण 10 में भी। मैंने अपने जवाब में उल्लेख किया है कि किसी भी ओरेकल डीएल को अपने आवेदन के साथ मैन्युअल रूप से कॉपी करना स्मार्ट नहीं है। मुझे इन dll के स्रोत कोड का पता नहीं है, लेकिन आपके ग्राहक पक्ष पर अधिक निर्भरताएं हो सकती हैं, जो आपको दिखाई नहीं देती हैं, जैसे कि भाषा सेटिंग, वर्ण सेट, समय क्षेत्र, आदि द्वारा ट्रिगर किया जाता है Oracle.DataAccess.dll। कुल 35 Oracle डीएलएल में प्रोग्राम लोड! ओरेकल क्लाइंट की सामान्य स्थापना बेहतर करें - जब तक कि आप ओडीपी.नेट प्रबंधित ड्राइवर का उपयोग न करें।
वर्नफ्रीड डमशेकिट

1
मुझे लगता है कि मैंने अपनी चिंताओं का उल्लेख किया है: (1) डेटाबेस स्थापित करना बेकार है, यानी ओवरकिल। (2) विकल्प ए और बी केवल कुछ शर्तों के तहत काम करते हैं, उदाहरण के लिए यह रजिस्ट्री से कोई भी एनएलएस-सेटिंग्स (जिसके लिए आप फ़ाइल दर्ज करते हैं oracle.key) नहीं पढ़ते हैं । अनुकूलता के लिए आपको मामूली संस्करणों को भी ध्यान में रखना होगा। उदाहरण के लिए संस्करण 2.112.4.0 के Oracle.DataAccess, Version=2.112.2.0साथ काम नहीं करता है OraOps11w.dll
वर्नफ्राइड डॉमशेकिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.