Обычно нет проблем с подключением к старой базе данных Oracle с более новым клиентским драйвером, например. для подключения к базе данных 10g или 11g с клиентом 12g. Остальная часть ответа относится к техническим проблемам, которые могут возникнуть в вашей программе .Net в случае, если клиент Oracle (возможно) уже установлен на компьютере, на котором выполняется ваша программа.
Обновление 2014 г.:
Тем временем Oracle выпустила управляемый драйвер .Net для базы данных Oracle. Таким образом, вместо установки локального клиента Oracle или доставки Instant Client вместе с вашим приложением предпочтительным способом должна быть доставка только управляемого драйвера без каких-либо зависимостей от локальных конфигураций. Тогда у вас не будет проблем с установленными клиентами, GAC, версией базы данных Oracle и так далее. Вы можете загрузить управляемый драйвер с веб-сайта Oracle.
Предыдущий ответ все еще необходим, если вы не можете использовать управляемый драйвер:
Проблемы начинаются, если вы не знаете, установлен ли клиент Oracle на ваших клиентских рабочих станциях. Если вы говорите о GAC, я полагаю, вы не знаете, установлен ли клиент Oracle, и если да, то какая у него версия.
Если вы не хотите полагаться на установленный Oracle Client, вы можете установить Oracle Instant Client вместе со своим приложением .Net. Например, вы можете загрузить ODAC 11.2, выпуск 4 (11.2.0.3.0 ) с инструментами разработчика Oracle для Visual Studio, что позволяет установить клиент Oracle для рабочей станции разработчика (с поддержкой Visual Studio для разработки наборов данных и EntityFramework), а также все файлы, необходимые для мгновенного клиента.
Для мгновенного клиента вам потребуются следующие файлы (ищите их в подпапках вашей установки ODAC):
- oci.dll
- ociw32.dll
- Oracle.DataAccess.dll
- orannzsbb11.dll
- oraociicus11.dll (если вы используете английский язык, иначе соответствующий .dll)
- OraOpd11w.dll
- tnsnames.ora (если вам это нужно)
Кроме того, необходимы следующие файлы .dll из каталога Windows:
Просто скопируйте все эти файлы в рабочий каталог вашего приложения (где находится файл .exe).
Какое отношение это имеет к GAC?
Если на клиентском компьютере установлен клиент Oracle, в GAC также есть Oracle.DataAccess.dll. Также возможно, что была установлена политика, которая гласит что-то вроде: Независимо от Oracle.DataAccess.dll, на которую ссылается ваша программа, версия Oracle.DataAccess.dll из ваш GAC должен всегда использоваться. Если вы установите ODAC, на который я ссылался выше, вы найдете этот файл в
C:\Windows\Microsoft.NET\assembly\GAC_32\Policy.4.112.Oracle.DataAccess\v4.0_4.112.3.0__89b483f429c47342
В результате ваше .Net-приложение всегда выдает исключение, если вы пытаетесь загрузить Oracle.DataAccess.dll (с сообщением об ошибке типа "Поставщик несовместим..."), если на клиентском компьютере установлена другая версия Установлен Oracle Client 11, а не тот, на который вы ссылаетесь в своем приложении.
Чтобы решить эту проблему, вы можете настроить свой app.conf так, чтобы политика издателя игнорировалась и всегда загружалась ваша версия:
<configuration>
...
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
person
Desty
schedule
20.02.2012