Поставщик не совместим с версией ошибки клиента Oracle при использовании Oracle.DataClient - PullRequest
16 голосов
/ 09 августа 2009

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

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

************** 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.

Ответы [ 5 ]

17 голосов
/ 11 августа 2009

Я уже больше разбираюсь в этой проблеме, и вам просто нужно взять все соответствующие библиотеки 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 #
1 голос
/ 10 августа 2009

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

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

0 голосов
/ 07 августа 2018

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

0 голосов
/ 10 августа 2009

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

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

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

НТН

0 голосов
/ 10 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...