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

Как написать приложение .Net, которое работает как с SqlServer, так и с Oracle (теперь, когда System.Data.OracleClient устарел)

см. также пространство имен System.Data.OracleClient прекращено?

(Во-первых, еще не паникуйте, System.Data.OracleClient еще не удаляется Microsoft, однако он не находится в клиентской версии .net 4)

Это использование возможно с помощью System.Data.OracleClient, однако Microsoft решила отказаться от OracleClient. (OracleClient - это поставщик ADO.NET для Oracle, разработанный Microsoft и поставляется как часть .NET Framework.)

Вы можете использовать ODP.Net, однако вы хотите, чтобы вашим клиентам Sql Server приходилось устанавливать ODP.Net? (Хотите, чтобы любой из ваших клиентов должен был установить программное обеспечение Oracle?)

DataDirect не является вариантом, поскольку он стоит на руке и ноге; он может быть просто доступен, если вам нужно подключить один сервер к мэйнфрейму. Однако не стоит ожидать, что все клиенты его купят.

Перемещение формы С# на Java не является хорошим вариантом, так как я программист на С# и хочу зарабатывать на жизнь!

Как и большинство независимых разработчиков программного обеспечения, которые должны поддерживать несколько RDBMS, нам нужно только решение, которое позволяет нам использовать небольшое подмножество Oracle, такое же, как SqlServer. Поэтому System.Data.OracleClient был достаточно силен для нас.

(Возможно, нам нужно просто начать хранить все данные в плоских файлах, чтобы клиенты DBA перестали пытаться рассказать нам, как писать программное обеспечение. Oracle DBAs хуже!)


Мой реальный вопрос заключается в том, как я могу написать .NET-программное обеспечение, которое говорит с Oracle, что нам больно устанавливать как программное обеспечение .NET, которое говорит с SqlServer. Необходимость использования ODP.NET просто заставляет клиента oracle устанавливать еще более болезненную, с еще большим количеством ошибок.

Если я использовал JAVA, я мог бы просто использовать драйверы типа JDBC типа 4. Microsoft предоставляет один для SqlServer, а Oracle - один для Oracle. Однако кажется, что Oracle хочет как можно более упростить использование .Net, и Microsoft хочет максимально упростить использование Oracle.


Пока лучший вариант выглядит как devArt dotConnect.

Однако я начинаю сомневаться в том, что .NET - хорошая система разработки для ISV, так как рано или поздно вы всегда получаете клиента, который требует поддержки оракула. В мире Java они, похоже, решили эту проблему.


Похоже, что Oracle, возможно, собирается выпустить сентиментального провайдера ADO.NET с полным управлением, он может быть даже прост в установке! см. здесь, который претендует на Beta - 2011, Production - конец 2011 года.

4b9b3361

Ответ 1

EDIT: полностью управляемый ODP.NET теперь доступен на производстве. Он очень мал (менее 10 МБ) и не зависит от других файлов. Вы можете получить его здесь:

http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html

Оригинальный ответ:

Один из способов легко убедиться, что требуемое программное обеспечение клиентской стороны Oracle (включая ODP.NET) всегда доступно на машине развертывания, - это встроить его в ваше приложение. ODP.NET стало намного проще вставлять сейчас, когда доступна XCOPY ODP.NET. Вы можете скачать его по этой ссылке:

http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

С XCOPY ODP.NET все, что вам нужно сделать при развертывании приложения, следующее:

1) Скопируйте приложение на целевую машину

2) Запустите "install.bat", который копирует пару DLL Oracle на целевую машину (включая ODP.NET и программное обеспечение клиентской стороны Oracle (OCI))

3) Запустите "configure.bat", который выполняет "gacutil" и обновляет реестр целевой машины.

4) Предоставьте вашему приложению информацию о строках подключения. Вы можете использовать строку подключения EZCONNECT ( "hostname @servicename" ), или вы (или ваш клиент) можете совместно использовать существующие конфигурации sqlnet, установив запись реестра или переменную среды TNS_ADMIN, чтобы указать на другой сервер Oracle, у которого уже настроены псевдонимы подключений sqlnet.

Что это! Это действительно так просто.

Я надеюсь, что вы хорошо рассмотрите ODP.NET XCOPY в приведенной выше ссылке, чтобы убедиться в том, насколько легко в эти дни встроить ODP.NET в ваше приложение.


Дополнительные примечания:

Если вы решите не внедрять ODP.NET с вашим приложением, как в случае с Microsoft OracleClient, так и в случае ODP.NET, на любом компьютере развертывания должно быть установлено дополнительное программное обеспечение клиентской стороны Oracle (OCI). Единственное различие между этими двумя случаями заключается в том, что при использовании ODP.NET он также должен существовать на машине развертывания. Хорошей новостью является то, что типичная установка Oracle на компьютере клиента будет включать ODP.NET уже.

Теперь, если ваша целевая машина уже установлена ​​ODP.NET, вам больше не нужно ничего делать. Вам просто нужно распространять свое приложение. Если вам нужно установить ODP.NET с помощью стандартного установщика, вы также можете загрузить его по приведенной выше ссылке. Стандартная установка ODP.NET занимает всего несколько минут и настраивает все для вас.

И снова вы можете использовать строки подключения EZConnect, чтобы сделать сетевую конфигурацию частью торта или использовать запись реестра или переменную среды TNS_ADMIN, чтобы использовать ранее существовавшие псевдонимы подключений, которые ваш клиент уже использовал для использования.

Надеюсь, что это поможет,

Кристиан Шей

Oracle

Не стесняйтесь предоставлять свои отзывы об этой и других будущих функциях на нашем веб-сайте с запросом на функции: http://apex.oracle.com/pls/apex/f?p=18357:46

Ответ 2

Вы рассматривали альтернативных поставщиков Oracle, например devArt dotConnect? Этот драйвер, например, является 100% -ным управляемым кодом, поддерживает множество продвинутых функций Oracle, обеспечивает поддержку Entity Framework (что наступит в ODP.NET, я уверен).

Существует множество других функций (например, поддержка модели поставщиков ASP.NET), которые мы не получили до выпуска ODP.NET 11g. Довольно либеральное лицензирование и разумные цены. Также поставляется с собственным профилировщиком, если я правильно помню.

В их тесты, выгодно отличается от ODP.NET. Я хотел бы указать вам на что-то открытое, но, по моему опыту, после того, как вы купили в Oracle в качестве базы данных, вы уже согласились с тем фактом, что вы будете закладывать наличные деньги для вашей базы данных, связанной с инструментами.

Ответ 3

Существует большая разница между устаревшим и удаляемым.

Если вы просто используете подмножество функциональных возможностей, которое является общим как для SQL Server, так и для Oracle, то вам должно быть хорошо перейти к ASP.Net 4.0 и продолжить программирование, как вы делаете в настоящее время.

Используя что-то вроде EntitySpaces, вы можете быть относительно агностиком провайдера. (он использует OracleClient в нем DAL)

Полностью согласен с Филиппом в том, что клиентское программное обеспечение Oracle является болью. Я потерял счет количества раз, когда я его установил, и ненавидел этот опыт. Дайте мне MySQL, SQLServer или даже Access в предпочтении.

(На самом деле, я возвращаю комментарий Access): -)

Ответ 4

Используйте "Провайдер Factory Шаблон", который в основном использует Factory, чтобы предоставить провайдер данных, полностью абстрагированный от методов запроса базы данных, который использует его здесь, blogpost с некоторым примером кода, который показывает, как это сделать также Jean-Paul Boodhoo по демистификации шаблонов проектирования Часть 1 на dnrtv.com показывает, как это сделать.

Это очень классный материал, в основном у вас есть Factory, который предоставляет методы для получения соединения

public IDbConnection GetConnection()
{
     IDbConnection connection =  _frameworkDBProviderFactory.CreateConnection();
     connection.ConnectionString = _authenticationSettings.ConnectionString;            
     return connection;
} 

хотя интерфейс, поэтому вы можете вызывать любой тип базы данных, объект подключения которой реализует интерфейс IDbConnection (SQLServer, MySQL, Oracle и т.д.), и он просто работает.

Отвлекаясь от того, какой БД вы используете, вы можете даже поменять их во время выполнения, и ваше приложение никогда не узнает, ему не нужно так подключаться к Orical DB, загрузите ODP.NET, то же самое с соединитель mysql и реализуют IDbConnection, и записывают ваш код против абстрактное соединение.

Ответ 5

В дополнение к тому, что предложили другие, вы можете рассмотреть использование шаблона Provider и Oracle ODP.NET.

Ответ 6

Независимость от базы данных - очень трудная работа, потому что есть много специфических вещей (привязка имен переменных, котировка объектов,...). Используйте библиотеку, например NHibernate, которая помещает слой между вашим приложением и реальной базой данных.

Если вам нужно подключиться к обеим базам данных, то это вопрос развертывания. Если вы подключаетесь к oracle (используя System.Data.OracleClient или Oracle.DataAccess.Client), вам необходимо установить программное обеспечение оракула на вашем компьютере. Поставщика базы данных, развернутого с помощью фреймворка, недостаточно для подключения к базе данных оракула. ​​

Если вы подключаетесь к oracle, вам необходимо установить программное обеспечение из oracle. Если вы боитесь устаревания, чем установите и используйте ODP.Net. Существуют некоторые различия между двумя поставщиками баз данных oracle.

Для лучшего развертывания Oracle предоставил концепцию мгновенного клиента. Этот клиент может быть развернут с помощью развертывания xcopy. Sine oracle 11 мгновенный клиент может быть связан с ODP.Net.

Установка ODP.Net описана на посту Christian Shay.

Сборник Oracle.DataAccess не должен находиться в глобальном кеше сборок. Поместите его в каталог bin. Мгновенный клиент, используемый Oracle.DataAccess, не должен находиться в другом каталоге на клиентской машине. Поместите его в каталог bin. Документация описывает, как настроить приложение для поиска мгновенного клиента.

Ответ 7

Возможно ли использование ODBC для обоих?

Ответ 9

Пока вы не вызываете объект ODP.Net, вам не нужно устанавливать ODP, если вы используете только SQL Server.

Ответ 10

Я считаю, что ODBC все равно может использовать SQL Server и Oracle с некоторой прозрачностью, поэтому я бы взглянул на использование ADO.Net с поставщиком ODBC. Он не даст вам полной производительности или функций, которые SqlClient или OracleClient, но он должен быть очень близок к одному и тому же коду для Oracle или SQL Server.

Ответ 11

Вы можете использовать SubSonic 3.0! Я запускаю приложение SQLServer, MySQL и SQLite, и пользователь может переключаться между этими 3 во время выполнения!

Ответ 12

По моему опыту вы не можете просто развернуть DLL-провайдер данных ODP.NET. Oracle требует установки Home для чего-либо большего, чем настройка по умолчанию (например, мы используем разрешение имен LDAP, требующее файл LDAP.ora на специальном домашнем пути).

Однако ODP.NET отлично реализует стандарты ADO.NET 2.0 (DbProviderFactory и т.д.). И я запрограммировал против базовых классов (DbConnection, DbCommand и т.д.) Без каких-либо потребностей в определенных классах в течение некоторого времени в моей компании.

Мое предложение сделать эту работу по доступу к данным - использовать/следовать указаниям в Entlib или использовать NHibernate.

Если у вас есть проблемы с логистикой или ИТ-установкой, устанавливающие ODP.NET или получающие ее для вашего клиента/клиента, я предлагаю вам поговорить с вашими ИТ-специалистами и Oracle о решениях для этого.

Ответ 13

Клиент должен установить odp.net и клиент Oracle на там машины. Не следует развертывать его. Ваше приложение найдет необходимую dll Oracle в GAC.