Можно ли подключиться к базе данных Oracle так, чтобы она работала в среде Mono (в Linux) и в развертывании ClickOnce (в Windows)? - PullRequest
1 голос
/ 15 апреля 2010

Очевидно, я бы не хотел устанавливать клиент Oracle (кроме просто DLL), потому что это запретило бы мою цель ClickOnce. Я попробовал System.Data.OracleClient, но он выдал исключение: «System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или более поздней».

Обновление:
Кажется, что System.Data.OracleClient - это не тот путь. Поэтому я скачал версию поставщика ODP.NET для Oracle с поддержкой xcopy. Затем я запустил «install.bat odp.net20 c: \ oracle odac», чтобы установить только ODP.NET. Затем я добавил ссылку в свой проект в C: \ oracle \ odp.net \ bin \ 2.x \ Oracle.DataAccess.dll. Это позволило мне попасть в БД Oracle. Но когда я беру все свои файлы на чистую машину (включая oracle DLL), я получаю исключение: «инициализатор типа для Oracle.DataAccess.Client.OracleConnection вызвал исключение» Так что кажется, что это все еще зависит от некоторых других файлов. Но я не знаю, какие файлы. И как он узнает, где находятся файлы? Запись в реестре? Не выглядит хорошим для ClickOnce.

Обновление:
Это работает, пока я включаю файлы, упомянутые mcauthorn: oci.dll, oracle.dataaccess.dll, oraociei11.dll и oraops11w.dll. К сожалению, oraociei11.dll очень большой - 114 МБ.

Ответы [ 3 ]

2 голосов
/ 15 апреля 2010

Я бы сказал, чтобы получить ODP.Net Dlls здесь . Вам придется взять версию XCopy, а затем добавить необходимые библиотеки DLL в свой проект, и тогда вам будет хорошо. System.Data.OracleClient более не поддерживается и не рекомендуется корпорацией Майкрософт.

0 голосов
/ 04 сентября 2014

Обновление, так как исходные ответы 4 года.

Просто используйте управляемый драйвер Oracle. Вам нужно только это, ничего больше. Затем вы можете напрямую подключиться к базе данных с помощью простой строки подключения.

<system.data>
  <DbProviderFactories>
    <remove invariant="Oracle.ManagedDataAccess.Client" />
    <!-- If any should be in the machine.config -->
    <add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral" />
  </DbProviderFactories>
</system.data>
<connectionStrings>
  <clear />
  <add name="OracleContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="DATA SOURCE=<IP_ADDRESS>:1521/XE;PASSWORD=<PASSWORD>;USER ID=<USER_ID>;Connection Timeout=600;Validate Connection=true" />
</connectionStrings>

Я использовал OrmLite из ServiceStack в качестве ORM, но он должен прекрасно работать и напрямую, если вы не хотите использовать ORM, или с любым другим. Все, что вам нужно, это убедиться, что ваша библиотека ORM также использует управляемый драйвер, а не старый. Я написал сообщение в блоге о взломе, где мне пришлось изменить ServiceStack.OrmLite.Oracle, чтобы использовать новый управляемый драйвер. Это решило все мои проблемы.

0 голосов
/ 15 апреля 2010

Вы можете использовать стороннего поставщика ADO.NET. Попробуйте этот . Он не требует Oracle Client и работает на Mono.

...