понедельник, 21 декабря 2009 г.

Доступ к Oracle из ASP.NET

Недавно столкнулся с такой проблемой: нужно разработать сайт, база данных которого по большей части хранится в СУБД Oracle (базу разрабатывал уже не я). Надо сказать, что к этой БД есть возможность обращаться посредством ODBC, а также в .NET Framework есть специальный клиент для СУБД Oracle (Namespace: System.Data.OracleClient), но оба варианта требуют установки клиентского ПО от Oracle: Oracle Data Access Components (ODAC).


Поискал в интрернете разную инфу на тему как подружить ASP.NET с базой Oracle. Среди найденных вариантов были ещё и организация доступа к БД Oracle через MS SQL Server, установка драйверов и адаптеров от сторонних разработчиков (платных).

Т.к. на начальной стадии сайт тестируется на виртуальном хостинге, то возможности установки клиентского ПО Oracle не нашлось. Поэтому наибольший интерес вызвала версия ODAC с официального сайта с пометкой XCopy на этой странице.

Получив нужный мне архив (Oracle 11g ODAC 11.1.0.7.20 with Xcopy Deployment) и немного поизучив скрипты установки (файлы *.bat), я понял что и куда копируется. Тогда я попробовал сделать простенький локальный проект: создал консольное приложение, скопировал к нему нужные файлы из архива, подключил к проекту библиотеку Oracle.DataAccess.dll, в которой есть нужное пространство имён со всеми классами (Connection, Command, Adapter и пр.), в программе написал подключение к удалённой БД и вывод результат на консоль. Запуск дал положительный результат :).

Теперь самое главное, что же именно я взял из архива:
для верности я вывернул три папки 'asp.net', 'instantclient_11_1', 'odp.net20' (остальные - по названию было понятно - предназначались для другого).
Таким образом, я получил набор файлов:
всё из папки 'instantclient_11_1'
содержимое папки 'asp.net\asp.net\bin\2.x\'
содержимое папки 'odp.net20\bin\'
и содержимое папки 'odp.net20\odp.net\bin\2.x\'


Ещё немного подумав и логически рассудив, я методом проб и ошибок исключил из набора файлы с расширением НЕ *.dll и некоторые файлы с расширением *.dll. В результате остался такой набор файлов:
msvcr71.dll (340,0 Кб)
oci.dll (508,0 Кб)
Oracle.DataAccess.dll (0,9 Мб)
oraociei11.dll (112,1 Мб)
OraOps11w.dll (404,0 Кб)


Этого набора хватило для подключения и отправки простейшего запроса к удалённой БД из программы сайта. Вот такой я выделил "тонкий" клиент для СУБД Oracle.