Ошибка поставщика несовместима с версией Oracle client при использовании Oracle.DataClient

StackOverflow https://stackoverflow.com/questions/1250644

Вопрос

Я использую Visual Studio 2008 Express Edition и пробую свои силы в разработке небольшого приложения с использованием Oracle.DataClient.Я получаю вышеупомянутую ошибку при попытке подключиться к базе данных в целевой системе.

Я добавил ссылку на Oracle ODP.net provider для Oracle 10gR2, и на целевой машине у меня установлена копия базы данных Oracle 10gR2.Несмотря на это, я получаю сообщение об ошибке.Прежде чем опубликовать это, я прочитал этот пост в SO, и я установил instant client, ошибка сохраняется.Ниже приведен полный стек ошибок.

************** Exception Text **************
System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client    at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()
   --- End of inner exception stack trace ---
   at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
   at Employees1.frmLogin.oralogin()
   at Employees1.frmLogin.btnTest_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
API Data Conversion Assistant
    Assembly Version: 0.0.0.1
    Win32 Version: 0.0.0.1
    CodeBase: file:///C:/Documents%20and%20Settings/3i/My%20Documents/My%20Dropbox/Sathya's%20dropbox/VisualStudio%20Releases/APIDataconversion/Application%20Files/API%20Data%20Conversion%20Assistant_0_0_0_3/API%20Data%20Conversion%20Assistant.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Oracle.DataAccess
    Assembly Version: 2.102.2.20
    Win32 Version: 2.102.2.20

У меня установлен Oracle 11g на компьютере, на котором я разработал приложение, и там оно работает нормально, но на целевом компьютере я получаю эту ошибку.Любые предложения будут оценены по достоинству.

PS:Как упоминалось выше, упомянутая версия файла Oracle.DataClient.dll соответствует 10gR2, а не 11g.

Это было полезно?

Решение

Я изучал эту проблему дальше, и вам просто нужно получить все соответствующие библиотеки DLL из той же загруженной версии ODP.Net и поместите их в ту же папку, что и ваш Exe-файл, потому что ODP.Net беспокоится о том, чтобы не смешивать номера версий, что является проблемой, которую вы видите (либо это, либо oci.dll полностью отсутствует, и в этом случае он раздражающе выдает ту же ошибку).

Я объяснил, как это сделать здесь: http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c Но вот в чем суть этого:

  • Скачать http://www.oracle.com/technology/software/tech/windows/odpnet/index1110710beta.html
  • Распакуйте архивный файл
  • Распакуйте все, что в нем есть.
  • Возьмите эти библиотеки DLL, которые были только что распакованы:oci.dll (переименовано из 'oci.dll.dbl') Oracle.DataAccess.dll oraociicus11.dll OraOps11w.dll orannzsbb11.dll oraocci11.dll ociw32.dll (переименовано из 'ociw32.dll.dbl')
  • Поместите все библиотеки DLL в ту же папку, что и ваш исполняемый файл на C #

Другие советы

Вы создали и успешно протестировали соединение с помощью администратора ODBC в вашей клиентской системе?

Выпущено исправление для проблемы с разрешениями в клиентах 9i и 10g, которое приводит к этой ошибке.Если вы используете версию 10.2.0.1, возможно, вам потребуется перейти на версию 10.2.0.3, чтобы решить эту проблему.

Что ж, я заставил свое приложение использовать соединение Ole DB (System.Data.Пространство имен Oledb), и оно работает нормально.Учитывая, что приложение является всего лишь интерфейсом для вызова Oracle SP, и никакие возвращаемые значения не возвращаются, я думаю, что такой подход является приемлемым, потому что за 2 дня, которые я потратил, пытаясь найти решение этой проблемы, я мог бы завершить гораздо больше разработки приложения.Я по-прежнему открыт для ответов, поскольку я могу извлечь урок из того, какую ошибку я совершаю для любых подобных приложений в будущем.

Я столкнулся с той же проблемой.Если на вашем компьютере установлен клиент 11g, то вам необходимо использовать библиотеку DLL 11g ODP.Net.Мне пришлось полностью удалить все, а затем установить клиент 11g, а затем драйверы 11g ODP.NET.Драйверы устанавливаются в GAC, и это становится своего рода проблемой.

* Обратите внимание, насколько я понимаю из моего администратора базы данных, это работает только в том случае, если вам не нужно подключаться к какой-либо версии ниже 9i *

Мы также должны были сделать это на наших серверах.

HTH

Даже после установки соответствующей версии клиента Oracle мы должны проверить, какая .Net Framewark установлена на сервере, ODP.Net поддерживает .Net Framework с 3.5 по 4.5.2.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top