Поставщик несовместим с версией ошибки клиента 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.
Ответы
Ответ 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 *
Мы также должны были сделать это на наших серверах.
НТН