Подтвердить что ты не робот

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

Я использую 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.

4b9b3361

Ответ 1

Я изучал эту проблему дальше, и вам просто нужно собрать всю соответствующую 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
  • Разархивируйте файл
  • Распакуйте все JAR в нем
  • Возьмите эти DLL, которые были просто распакованы: oci.dll(переименован из 'oci.dll.dbl') Oracle.DataAccess.dll oraociicus11.dll OraOps11w.dll orannzsbb11.dll oraocci11.dll ociw32.dll(переименован из 'ociw32.dll.dbl')
  • Поместите все библиотеки DLL в ту же папку, что и ваш исполняемый файл С#

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

НТН