Как проверить предварительные условия для подключения ODP и Oracle Client - PullRequest
2 голосов
/ 22 июля 2010

У меня есть очень простое приложение на .Net, которое подключается к Oracle с помощью ODP (было скомпилировано с Oracle.DataAccess dll 10.2).Я хочу проверить «предварительное условие подключения» (приложение сможет подключаться к БД) перед установкой этого приложения на других компьютерах?

Как проверить, что ODP.NET версии 10.2 или выше установлена ​​нацелевой хост (проверка реестра не enopugh)?

Я знаю, что могу проверить записи ODP в реестре - но это не проверит Oracle Client и совместимость между клиентом и ODP.Кроме того, если ODP был установлен посредством установки ODAC XCopy - реестр может не обновляться новой записью ODP.И - если я устанавливаю на компьютер, на котором была установлена ​​БД, Oracle Client не может быть установлен отдельно.

И еще одна проблема: когда я пытался запустить метод «тестовое соединение» из установки, в которой используется ссылкаdll на компьютере, который имеет только ODAC (с ODP) 11, - "Oracle.DataAccess.Client.OracleException Поставщик не совместим с версией клиента Oracle в Oracle.DataAccess.Client.OracleInit.Initialize () в Oracle.DataAccess.Client.OracleConnection..cctor () "было выдано сообщение об ошибке (в GAC (сборка) существуют политики для ODAC 10.2 и 11, указывающие на Oracle.DataAccess 11 из бина ODP 2x).

Итак, Как и какие компоненты можно проверить, чтобы убедиться, что установлены соответствующие версии ODP и Oracle Client, и приложение будет подключено?

Заранее спасибо!

1 Ответ

0 голосов
/ 23 августа 2011

Вы можете использовать фабричные классы DataProvider из .Net. Это покажет всех поставщиков данных, которые доступны для вашей текущей установки .Net / процесса. У меня есть сообщение в блоге о том, как это сделать. Я поставил его на место, чтобы наши пользователи не могли использовать версии Oracle, которые не поддерживаются в .Net 4.0.

http://blog.tsells.com/2011/05/12/oracle-11g-release-2-and-net-framework-4-0-and-version-checking/

Недавно я обнаружил, что Oracle не поддерживает платформу .net 4.0 с какой-либо версией провайдера Oracle для .Net до 11.2.0.2. (Подробнее см. В разделе Поставщик данных Oracle для поддерживаемых конфигураций .NET (ODP) [ID 726240.1] от Oracle).

Поскольку предыдущие версии работают (10.2, 11.1, 11.2.0.1), мне нужен был способ, чтобы конечные пользователи не могли использовать неправильную версию. Я искал в сети и не смог найти никого, кто смог бы это сделать, поэтому я немного покопался. После некоторого тестирования я придумал следующий код.

 System.Data.Common.DbProviderFactory factory =
                    System.Data.Common.DbProviderFactories.GetFactory("Oracle.DataAccess.Client");

                if (factory == null)
                    return false;

                Type t = factory.GetType();

                int majorversion = t.Assembly.GetName().Version.Major;

                // Do not allow any major versions less than 4
                if (majorversion < 4)
                    return false;

В этом коде будет использоваться тот же поставщик данных, который зарегистрирован в используемой вами версии .net framework. Это гарантирует, что вы не выходите из раковины в вашей среде и позволяет вам проверить версию установленной библиотеки DLL. Для этого примера - я просто проверяю, что ODP 4.0 или выше (первый выпуск odp для .net 4).

...