Letysite.ru

IT Новости с интернет пространства
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Oracle dataaccess client

Доступ к базе данных Oracle средствами ADO.NET Entity Framework

При разработке программного обеспечения всегда руководствовался простым правилом, чем меньше в развивающемся проекте используется сторонних компонентов, платформ, технологий, тем лучше. Почти все гениальное — просто. К сожалению, у разработчика не всегда есть возможность свободного выбора средств и систем, с которыми он работает. Вот и мне достался проект Windows Forms + ODAC + Oracle DB Server.

С большой радостью узнал о выходе Oracle Data Access Components (ODAC) for Microsoft Entity Framework and LINQ to Entities (Beta2). Очень ждал этого момента и вот свершилось! Можно не использовать сторонние ORM — все под ключ.

Как научить приложение использовать Entity Framework через установленный на конечных машинах клиент ODAC — описано в пошаговой инструкции от Oracle. Кому интересно, как избавиться от необходимости установки клиента Oracle на машинах пользователей, прошу под кат.

К системе пользователя:
ОС не ниже MS Windows XP SP3
Microsoft .NET Framework 4
Дополнительно

135 МБ свободного дискового пространства

К системе разработчика:
Visual Studio 2010 Service Pack 1
Oracle Database server 9.2 или выше
ODAC for Microsoft Entity Framework and LINQ to Entities

Для организации доступа к базе данных Oracle необходимо к проекту добавить следующие библиотеки из пакета ODAC.NET: Библиотеку «путь к клиенту»client_1odp.netbin4Oracle.DataAccess.dll (

1.4 MB)) подключить как Reference и присвоить свойству «Copy local» значение «true».

Следующие файлы необходимо просто добавить к проекту и присвоить свойству «Copy to Output Directory» значение «Copy if newer»:
«путь к клиенту»client_1oci.dll (

1 MB)
«путь к клиенту»client_1orannzsbb11.dll (

1.2 MB)
«путь к клиенту»client_1binOraOps11w.dll (

0.3 MB)
«путь к клиенту»client_1oraociei11.dll (

Строка подключения должна иметь такой же вид как в файле «tnsnames.ora»:

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User Id=UserName;Password=UserPa$$w0rd;

Этого достаточно для обеспечения доступа к БД без установки клиента на машине пользователя:
private bool TestConnect()
<
try
<
var oracleConnection = new OracleConnection
<
ConnectionString =
«Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User Id=UserName;Password=UserPa$$w0rd;»
>;
oracleConnection.Open();
var oracleCommand = new OracleCommand
<
CommandText = «select sysdate from dual»,
Connection = oracleConnection,
Transaction = null
>;
var oracleDataAdapter = new OracleDataAdapter ;
var sysDateDataSet = new DataSet(«SomeName»);
oracleDataAdapter.Fill(sysDateDataSet, «dateTimeTable»);
return sysDateDataSet.Tables[0].Rows.Count > 0;
>
catch (Exception exx)
<
MessageBox.Show(string.Format(«Could not connect directly to an Oracle database: n <0>«, exx.Message));
return false;
>
* This source code was highlighted with Source Code Highlighter.

Что необходимо сделать для использования Entity Framework Model без установки клиента Oracle

Создать, либо свою модель ADO.NET Entity Data Model, либо как в примере — «HRModel» с контекстом «HREntities». Для этого необходимо воспользоваться мастером добавления, как показано в руководстве от Oracle, упомянутом выше.

В файл конфигурации проекта (App.Config/Web.Config) будет автоматически (если вы выберете данный соответствующий пункт в мастере) добавлена строка подключения к БД Oracle:

Тут стоит обратить особое внимание на то, что значение, присвоенное атрибуту «provider connection string» обязательно должно быть в двойных кавычках (для их обозначения необходимо использовать код &_q_u_o_t). Это также стоит учесть при динамическом формировании строки подключения.

Затем в файле конфигурации проекта необходимо создать раздел, в котором мы добавляем свой поставщик данных к уже зарегистрированным в системе, список которых находится в файле «%windir%Microsoft.NETFrameworkv4.0.30319Configmachine.config». Если на машине установлен ODAC, то провайдер «Oracle.DataAccess.Client» уже будет прописан в файле конфигурации системы и попытка добавить наш поставщик вызовет ошибку при старте приложения: «An error occurred creating the configuration section handler for system.data: Column ‘InvariantName’ is constrained to be unique. Value ‘Oracle.DataAccess.Client’ is already present».

Для предотвращения подобной ситуации, при помощи тега

провайдер «Oracle.DataAccess.Client» будет удален из списка поставщиков данных, если он присутствует. Затем добавляем наш поставщик. Он будет добавлен к списку провайдеров EntityClient, зарегистрированных в системе:

При динамическом подключении модели к БД «правильным» методом от MS, следует обратить внимание на не совсем корректное формирование строки подключения через объект EntityConnectionStringBuilder
string providerName = «Oracle.DataAccess.Client»;
string dataSourse = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User Id=UserName;Password=UserPa$$w0rd;»;
var sqlBuilder =
new SqlConnectionStringBuilder
<
DataSource = dataSourse
>;
string providerString = sqlBuilder.ToString();
var entityBuilder =
new EntityConnectionStringBuilder
<
Provider = providerName,
ProviderConnectionString = providerString,
Metadata =
@»res://*/HRModel.csdl/res://*/HRModel.ssdl/res://*/HRModel.msl»
>;
using (var conn =
new EntityConnection(entityBuilder.ToString()))
<
conn.Open();
Console.WriteLine(«Just testing the connection.»);
conn.Close();
>

* This source code was highlighted with Source Code Highlighter.

В результате entityBuilder.ToString() вернет строку подключения с лишними одинарными кавычками, в которые заключено полностью значение атрибута provider connection string
metadata=…;provider=Oracle.DataAccess.Client;provider connection string=’Data Source=»(DESCRIPTION=(… ); User Id=UserName;Password=UserPa$$w0rd;»‘

В то время как провайдер Oracle требует строку подключения следующего формата:
metadata=…;provider=Oracle.DataAccess.Client;provider connection string=»Data Source=(DESCRIPTION(…); User Id=UserName;Password=UserPa$$w0rd;»

— иначе выдает ошибку.
Пока можно формировать строку подключения некрасиво:
private bool DynamicConnect()
<
const string providerName = «Oracle.DataAccess.Client»;
const string serverName = «(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User Id=UserName;Password=UserPa$$w0rd;»;
const string metadata = «metadata=res://*/HRModel.csdl/res://*/HRModel.ssdl/res://*/HRModel.msl»;
var entBild = string.Format(«metadata=<0>;provider=<1>;provider connection string=»Data Source=<2>«;», metadata, providerName, serverName);
try
<
var conn = new EntityConnection(entBild);
conn.Open();
var hrEntities = new HREntities(conn);
var tmpResult = hrEntities.BRIDGE.Count();
conn.Close();
return true;
>
catch (Exception exx)
<
MessageBox.Show(string.Format(«Could not connect directly to an Oracle database: n <0>«, exx.Message));
return false;
>
>

* This source code was highlighted with Source Code Highlighter.

Быть может это отголоски бета версии — посмотрим как будет в релизе, который, как обещает Oracle, состоится в четвертом квартале 2011 года.

В итоге можно записать в актив:

Прямая связка .NET Entity Framework с СУБД Oracle DB Server, без использования сторонних разработок
Избавление от установки клиента к Oracle DB Server на рабочих станциях пользователей
Развертывание .NET приложений, использующих СУБД Oracle, средствами технологии ClickOnce без предоставления прав администратора конечному пользователю (это была основная моя задача).

Oracle.DataAccess.Client зависимости

Прежде всего, я хочу использовать Oracle.DataAccess.dll для использования OracleBulkCopy .

Я хочу знать все библиотеки DLL, которые мне нужно прочитать из базы данных, а затем выполнить bulkcopy в Oracle. В настоящее время мы используем только один dll для выполнения всех операций чтения из баз данных, мы используем Oracle.ManagedDataAccess.Client . Но я не могу использовать его для выполнения bulkCopy.

Я не хочу устанавливать ODP.NET для пользователей, я хочу включить dll непосредственно в программу. Поэтому я хочу знать минимальные необходимые библиотеки DLL, чтобы иметь возможность использовать Oracle.DataAccess.dll в 32-битном и 64-битном режимах.

Читать еще:  Как взломать офис 2020

Я знаю, что есть некоторые старые сообщения об этом, но это тихий старый и перечисленные библиотеки DLL устарели. Я даже не могу найти некоторые из них.

Я установил ODP.net для ODAC12 и восстановил все перечисленные библиотеки DLL в этом посте . Я тоже пробовал с этим постом . Перечисленные библиотеки DLL указывают на версию 11.

Я сделал фиктивный проект, который открывает соединение, читает таблицу и помещает ее в другую таблицу. Я скопировал перечисленные библиотеки DLL из записей в корне проекта и включил Oracle.DataAccess.dll в проект.

Когда я запускаю свою программу в 64 битном режиме я получаю следующую ошибку:

Не удалось загрузить файл или assembly ‘Oracle.DataAccess, Version=4.121.2.0, Культура=нейтральная, PublicKeyToken=89b483f429c47342’

Когда я запускаю его в 32-битном режиме, я получаю эту ошибку:

Невозможно загрузить DLL ‘OraOps12.dll’: указанный модуль не может быть найдено. (Исключение из HRESULT: 0x8007007E)»

Библиотеки DLL, которые я включил, являются:

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb12.dll
  • oraocci12.dll
  • oraociei12.dll
  • OraOps12.dll

3 Ответа

Мне удалось заставить его работать.

Загрузите хорошую версию ODAC, которая будет нацелена на ваш проект.

Для 32- битного проекта вам нужно скачать ODAC12. _x32.zip (ODAC121021Xcopy_32bit.zip).

Для 64- битного проекта вам необходимо скачать ODAC12. _x64.zip

Распакуйте его в пустую папку в зависимости от версии, которую вы хотите (32bit vs 64bit).

Найдите в папке instantclient_12_1 все библиотеки DLL, выполнив поиск *.dll в строке поиска windows. Тебе нужно схватиться:

Скопируйте эти 32-битные библиотеки DLL или 64-битные библиотеки DLL и поместите их непосредственно в выходной путь вашего проекта. Например, в C:. vsProjectsBulkInsertBulkInsertbinDebug .

Просмотрите Oracle.DataAccess.dll в вашем проекте, указав на выходной путь.

Я столкнулся с аналогичной проблемой; установите oracle компонентов доступа к данным (odac ODTwithODAC122010.zip) для решения.

Похоже, что вы не установили Oracle Instant client (или любую другую версию Oracle Client). Это обязательное условие для неуправляемого поставщика ODP.NET.

Установите мгновенный клиент Oracle, и все будет в порядке. Иначе вы не получите ничего, кроме неприятностей.

Похожие вопросы:

Я пытаюсь разместить службу WCF в IIS, но получаю следующую ошибку. Раздел конфигурации ‘oracle.dataaccess.client’ не может быть прочитан, потому что в нем отсутствует объявление раздела Я добавил.

Наше веб-приложение C# подключается к удаленной базе данных oracle с помощью Oracle.DataAccess.Client Я хотел бы знать, зашифрованы ли результаты запроса при передаче. Я не вижу ничего в строке.

У меня возникли проблемы с получением библиотеки ODP.NEt для работы с .NET DBProviderFactories. Я получаю следующую ошибку с этим кодом: _DBFactory = DbProviderFactories.GetFactory(providerName);.

мой вопрос: Я пытаюсь использовать Oracle.DataAccess.Client Provider с NHibernate (Fluent), и я настроил его следующим образом.

Итак, допустим, у нас есть три среды dev, qa и prod. Кроме того, все разработчики имеют свою собственную среду. Как вы управляете строкой подключения или настройкой приложения для каждого env? Я.

У меня есть visual studio 2012 и Oracle 11g, и я хочу подключить базу данных oracle с помощью OPD.NET .I скачал ODAC112040Xcopy_32bit zip файл и un zip файл и нажмите кнопку intall.bat и.

Я довольно новый, используя codesmith. Я сделал пару правок здесь и там, но прямо сейчас мне нужно внести довольно большие изменения в наш шаблон Мой вопрос в том, что я пытаюсь добавить assembly в.

База данных Oracle Database для начинающих: основы базы данных

Чтобы получить доступ к базе данных Oracle с ПК, вначале на нем необходимо инсталлировать программное обеспечение Oracle Client. Программное обеспечение Oracle Client поставляется вместе с программным обеспечением Oracle Server. Кроме того, его можно загрузить также из сайта OTN (http://technet.oracle.com). Программное обеспечение Oracle Client доступно для загрузки отдельно. Хотя версии Oracle Server и Oracle Client не обязательно должны совпадать, в Oracle рекомендуют применять соответствующие версии ПО, чтобы можно было полностью воспользоваться преимуществами новых функциональных возможностей.

Версию Oracle Client можно выяснить, просмотрев вывод при вызове утилиты SQL*Plus, как показано в следующем примере:

Приведенный вывод команды SQL*Plus показывает, что в системе установлено программное обеспечение Oracle Client версии 11.1.0.6.0.

При установке программного обеспечения Oracle Client можно выбрать одну из четырех опций.

  • Administrator (Администратор). Позволяет приложениям подключаться к локальным или удаленным базам данных Oracle и управлять ими.
  • Runtime (Компоненты времени выполнения). Позволяет подключаться к локальным или удаленным базам данным Oracle.
  • Custom (Пользовательская установка). Позволяет выбирать отдельные компоненты из числа устанавливаемых при вариантах установки Administrator и Runtime.
  • Instant Client (Мгновенный клиент). Производится инсталляция только библиотек совместного использования, необходимых для OCI (Oracle Call Interface — Интерфейс вызова Oracle), OCCI (Oracle C++ Call Interface — Интерфейс вызова C++ Oracle) и приложениям Java Database Connectivity OCI (Java-OCI подключения к базе данных).

На заметку! Новая опция Instant Client описана в наших блогах в статье “Мгновенный клиент Oracle”.

Установка Oracle Client

Чтобы установить программное обеспечение Oracle Client, выполните следующие действия.

  1. Вставьте компакт-диск Oracle Database 11g Client в привод или запустите сценарий runInstaller из промежуточного каталога.
  2. Выберите пункт меню Install/Deinstall Products (Установка и удаление программных компонентов) и щелкните на кнопке Next (Далее).
  3. Откроется Welcome (Приветствие). Щелкните на кнопке Next.
  4. На странице Specify File Locations (Укажите расположение файлов) примите заданный по умолчанию каталог файлов или введите имя и путь домашнего каталога Oracle. Щелкните на кнопке Next.
  5. На экране Select Installation Type (Выберите тип инсталляции) можно выбрать один из четырех вариантов — Instant Client, Administrator, Runtime или Custom. Выберите из списка опцию Runtime Installation (Установка компонентов времени выполнения) и щелкните на кнопке Next.
  6. Просмотрите компоненты, которые будут инсталлированы в процессе этого типа установки и щелкните на кнопке Install (Установить).
  7. После завершения установки программного обеспечения Oracle Client откроется помощник Oracle Net Configuration Assistant. Выберите опцию No, I Will Create Service Names Myself (Нет, я создам имена служб самостоятельно) и щелкните на кнопке Next.
  8. В поле Database SID (Системный идентификатор базы данных) введите имя базы данных и щелкните на кнопке Next.
  9. В качестве протокола выберите TCP и щелкните на кнопке Next.
  10. В поле Host Name (Имя хоста) введите имя сервера своего хоста и выберите стандартный порт. Щелкните на кнопке Next.
  11. Щелкните на кнопке Yes (Да), чтобы протестировать возможность подключения, а затем щелкните на кнопке Next.
  12. После отображения сообщения Connecting . . . Test Successful (Подключение . . . Тестирование выполнено успешно) щелкните на кнопке Next.
  13. Отвечая на вопрос о том, нужно ли конфигурировать другую службу, выберите опцию No (Нет). Щелкните на кнопке Next.
  14. Подтвердите завершение настройки имени сетевой службы, щелкнув на кнопке Next.
  15. Щелкните на кнопках Finish (Готово) и Exit (Выход).
Читать еще:  Картинки на рабочий стол офис

Совет. При наличии нескольких установок Oracle на ПК система может содержать также несколько файлов tnsnames.ora. Пользователь может оказаться не в состоянии подключиться к новой базе данных после добавления информации о конфигурации сети в файл tnsnames.ora, если используется не этот файл. Убедитесь, что в пути ПО Oracle Client указан нужный файл tnsnames.ora.

Использование переменной среды TWO_TASK

Использование имени Oracle Net можно обойти, устанавливая переменную среды TWO_TASK (в системе UNIX/Linux) или переменную среды LOCAL (в системе Windows).

Переменная TWO_TASK указывает строку подключения для подключения к удаленному компьютеру. Программа SQL*Plus проверит значение переменной среды TWO_TASK и автоматически добавит его в строку подключения, как показано в следующем примере:

Как только переменная среды TWO_TASK установлена, к базе данных mydb можно подключаться следующим образом:

Обратите внимание, что применять спецификацию sqlplus scott/tiger@mydb не пришлось, поскольку используется переменная TWO_TASK.

На сервере Windows следующие команды эквивалентны установке переменной среды TWO_TASK:

Какой минимальный объем клиентских ресурсов требуется для подключения C# к базе данных Oracle?

Я успешно подключился к базе данных Oracle (10g) из C# (Visual Studio 2008), загрузив и установив средства администрирования клиента и Visual Studio 2008 на своем ноутбуке.

установочный объем для клиентских инструментов Oracle был более 200 мб и довольно долго наматывался.

кто-нибудь знает, что такое минимальный рабочий след? Я надеюсь, что это одна DLL и команда register, но у меня есть ощущение, что мне нужно установить oracle home, и установите различные переменные среды.

Я использую Oracle.DataAccess в моем коде.

8 ответов:

для подключения к базе данных Oracle требуется клиент Oracle. Самый простой способ-установить Компоненты Доступа К Данным Oracle.

чтобы минимизировать след, я предлагаю следующее:

  • используйте поставщик Microsoft для Oracle (System.Данные.OracleClient), который поставляется с каркасом.
  • скачать Oracle Instant Client Package — Basic Lite: это zip-файл с (почти) голым минимумом. Я рекомендую версия 10.2.0.4, которая намного меньше, чем версия 11.1.0.6.0.
  • распакуйте файлы в отдельную папку :
    • v10 :
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11 :
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • на платформе x86 добавьте библиотеку DLL CRT для Visual Studio 2003 (msvcr71.dll) в эту папку, как Оракул ребята забыли читать это.
  • добавьте эту папку в переменную среды PATH.
  • использовать Простое Подключение Именования метод в вашем приложении, чтобы избавиться от печально известных TNSNAMES.Конфигурационный файл ORA. Выглядит это так: sales-server:1521/sales.us.acme.com .

Это составляет около 19 МБ (v10).

Если вы не заботитесь о совместном использовании этой папки между несколькими приложения, альтернативой было бы отправить вышеупомянутые DLL вместе с вашими двоичными файлами приложений и пропустить шаг настройки пути.

Если вам абсолютно необходимо использовать поставщик Oracle (Oracle.DataAccess), вам понадобится:

  • ODP .NET 11.1.0.6.20 (первая версия, которая якобы работает с Instant Client).
  • мгновенный клиент 11.1.0.6.0, очевидно.

обратите внимание, что я не проверял этот последний конфигурация.

по состоянию на 2014 год, OPD.NET, управляемый водитель самый малый след ноги.

вот сравнение использования кода с неуправляемыми версиями, которые предлагали предыдущие (устаревшие) ответы: http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

вам нужно будет скачать эти DLL и ссылки Oracle.ManagedDataAccess.dll в вашем проекте: СкачатьODP.NET, управляемый драйвер Xcopy версия только

вот типичная нога печать вам нужно будет упаковать с вашим релизом:

все вместе целых 6.4 МБ для .Net 4.0.

Я использую метод, предложенный Pandicus выше, в Windows XP, используя ODAC 11.2.0.2.1. Шаги заключаются в следующем:

  1. загрузите пакет «ODAC 11.2 Release 3 (11.2.0.2.1) с развертыванием Xcopy» из oracle.com (53 МБ), и извлечь ZIP.
  2. соберите следующие библиотеки DLL: oci.dll (1 MB), oraociei11.dll (130 MB!), OraOps11w.dll (0.4 MB), Oracle.Доступа к данным.dll (1 MB). Остальные вещи можно удалить, и ничего не надо установленный.
  3. добавить ссылку на Oracle.Доступа к данным.dll, добавить using Oracle.DataAccess.Client; для вашего кода и теперь вы можете использовать такие типы, как OracleConnection , OracleCommand и OracleDataReader для доступа к базе данных Oracle. Смотрите документация класс для сведения. Нет необходимости использовать файл tnsnames.файл конфигурации ora, только строку подключения должна быть установлена правильно.
  4. вышеуказанные 4 DLL должны быть развернуты вместе с исполняемым файлом.

этот путь позволяет вам соединиться с ODP.net использование 5 распространяемых файлов из oracle:

Edit: в случае, если блог каждый идет вниз, Вот краткое резюме.

  • oci.dll
  • Оракул.Доступа к данным.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • ociw32.dll

убедитесь, что вы получаете все эти DLL из одного и того же ODP.Net / распределение ODAC, чтобы избежать конфликтов номеров версий, и поместите их все в ту же папку, что и ваш EXE

DevArt http://www.devart.com/, ранее CoreLab (crlab.com) предоставляет клиент Oracle pure-C#. Это одна dll, и она отлично работает.

вот обновление для Oracle 11.2.0.4.0. Я имел успех со следующей процедурой на Windows 7 используя System.Data.OracleClient .

1. скачать Instant Client Package-Basic Lite:Windows 32-Бит или 64-бит.

2. скопируйте следующие файлы в вашей системе путь:

32-бит

64-бит

(см. примеры в тестовой программе ниже.)

4. запустите эту минимальную программу C#, чтобы проверить вашу установку:

последний совет: если вы столкнулись с ошибкой система».Данные.OracleClient требуется клиентское программное обеспечение Oracle версии 8.1.7″ см. этот вопрос.

Oracle dataaccess client

В данной статье рассмотрим подключение к Oracle, выполнение sql-запросов, хранимых процедур и функций.

Обращение к Oracle из asp.net возможно как средствами Oracle (odac), так и средствами Microsoft (System.Data.OracleClient). Но Microsoft заявила (http://blogs.msdn.com/b/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx) о прекращении поддержки OracleClient. В .NET Framework 4.0 компонент помечен как нежелательный, в более новых версиях по словам представителей Microsoft компонента не будет совсем. Поэтому рассмотрим именно Oracle Data Provider.

Читать еще:  Как в опен офисе

Сперва должен быть установлен Oracle и odac (который включает в себя Oracle Data Provider for .NET ). Ну и естественно потребуется .NET Framework и Visual Studio. Приведённые примеры тестировались в Oracle 11g, .NET Framework 3.5, Visual Studio 2008, Windows 2003 Server Enterprise Edition SP2.

Первым делом должен быть установлен сам Oracle. Далее устанавливаем odac.
Во избежании проблем, желательно устанавливать на англоязычную версию Windows. Если всё же ставите на русскую, то путь установки не должен содержать кириллицу, имя windows-пользователя – тоже.

Далее в Visual Studio создадим новый проект: Visual c# — Web – ASP NET Web Application, назовём его testasp.

Теперь займёмся Oracle. Работать будем через Oracle SQL Developer (не через asp.net), так как всё что нужно, в нём имеется и не требуется настройки odp.net в Visual Studio, по объёму работ которой можно написать целую статью и даже не одну.

Создадим web-пользователя, например «webuser», пароль «usrweb». Создать его можно как в SQL Developer (клик правой кнопкой мыши на Other Users – Create User), так и в web-интерфейсе — https://имя_компьютера:1158/em

Если https://имя_компьютера:1158/em не работает, проверьте службу OracleDBConsoleorcl. При проблемах с запуском данной службы добавьте в файл hosts (C:WINDOWSsystem32driversetc) строку вида – ip_адрес имя_компьютера.

В моём случае это –

Теперь в web.config добавим строку подключения –

где «oracle_conn» – имя строки подключения.

Первым параметром указываем источник данных. Если база одна (по умолчанию orcl), то данный параметр оставляем пустым, если несколько, то указываем нужный (можно взять конкретный «data source alias» из файла tnsnames.ora). Второй параметр – пароль, значение третьего — false (не сохранять конфиденциальную информацию о подключении), четвёртый – имя пользователя, пятый – имя провайдера.

Далее в Visual Studio в меню выбираем «Project – Add Reference», ищем в открывшемся окне Oracle.DataAccess, жмём ok.
Теперь в Class View в Project References можем увидеть подключенный Oracle.DataAccess.

Как видно из примера, дополнительно к оракловским неймспейсам указываем ещё два —
System.Web.Configuration – в данном случае это доступ к строке подключения, находящейся в web.config и
System.Data – ado.net (указание типов параметров — хранимая процедура / sql-запрос, их направление — входящие/исходящие и т.д.).

Можно конечно обойтись без неймспейсов, но гораздо удобней писать в коде —

нежели полностью перечислять —

Открываем web.config, в секцию добавляем —

Копируем Oracle.DataAccess.dll в папку bin нашего проекта.

Также есть второй способ.

После установки odac, Oracle.DataAccess автоматически помещается в GAC (Global Assembly Cache) по адресу C:WINDOWSassembly. Если по каким-то причинам его там не оказалось, то можно зарегистрировать вручную –

gacutil -i c:путь_к_oracleOracle.DataAccess.dll

В моей конфигурации gacutil.exe находится в папке —

C:Program FilesMicrosoft SDKsWindowsv6.0Abin
Флаг –i означает install (установку) сборки.

Теперь в папке GAC (C:WINDOWSassembly) напротив Oracle.DataAccess смотрим зачения Public Key Token = 89b483f429c47342, Version = 2.111.6.20, Culture = neutral (если данное значение не указано, значит neutral). У вас эти параметры могут отличаться.

Теперь нет необходимости копировать Oracle.DataAccess.dll в папку bin каждого проекта, достаточно лишь добавить сборку через web.config.

На этом процесс подключения окончен.

Выполнение sql-запросов, процедур и функций.

Рассмотрим несколько вариантов — простой запрос из asp.net, вызов хранимой процедуры с возвращаемым курсором, вызов хранимой процедуры с входящим (IN) и выходящим (OUT) параметрами, вызов функции с возвращаемым значением (Return).

Сперва в SQL Developer создадим пакет процедур и функций (packages). В одном пакете можно объединить несколько процедур и функций, связанных каким-либо общим назначением, что довольно удобно. Назовём его «test», создадим курсор (ref cursor), объявим две процедуры – getusers(), chk() и функцию retnum().

create or replace PACKAGE TEST AS

TYPE outcursor IS REF CURSOR;

PROCEDURE getusers(paramout OUT outcursor);

PROCEDURE chk(paramin IN DECIMAL, paramout OUT DECIMAL);

FUNCTION retnum(x DECIMAL) RETURN DECIMAL;

Далее создадим тело пакета (body package) и реализуем объявленное –

create or replace PACKAGE BODY TEST AS

PROCEDURE getusers(paramout OUT outcursor) AS
BEGIN
OPEN paramout
FOR
SELECT login, address FROM users;
END getusers;

PROCEDURE chk(paramin IN DECIMAL, paramout OUT DECIMAL) AS
BEGIN
SELECT 10 + paramin
INTO paramout
FROM dual;
END chk;

FUNCTION retnum(x DECIMAL) RETURN DECIMAL AS
BEGIN
RETURN 10 + x;
END retnum;

1. Простой запрос, создаваемый на asp.net-странице.

2. Вызов хранимой процедуры getusers(). Присутствует единственный параметр – возвращаемый курсор.

3. Вызов хранимой процедуры chk(). Присутствует два параметра, входящий в процедуру – «paramin» и возвращаемый из процедуры – «paramout».

SELECT 10 + paramin
INTO paramout
FROM dual;

В качестве примера к входящему десятичному параметру прибавляем 10 и возвращаем результат.

Код на стороне asp.net —

Сделаем два первых варианта с помощью SqlDataSource. Сам по себе этот компонент не предназначен для работы с Oracle и разрабатывался специально для MS SQL Server, поэтому его использование нежелательно.

а) Первый запрос у нас достаточно прост и его можно создать прямо в дизайнере Visual Studio, перетащив на форму и настроив SqlDataSource-компонент, также добавим GridView.

б) Со вторым запросом и хранимой процедурой всё гораздо сложнее. Visual Studio генерирует неверный с точки зрения Oracle код. Имя процедуры вида «TEST#0#GETUSERS» будет ошибочным, поэтому вручную его изменяем на «TEST.GETUSERS». Далее нам нужен параметр ref cursor, которого естественно нет в данном компоненте. Но выход есть, открываем codebehind(*.cs) и дописываем следующие строки –

protected void UserSourse_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
<
((Oracle.DataAccess.Client.OracleParameter)e.Comma nd.Parameters[0]).OracleDbType = Oracle.DataAccess.Client.OracleDbType.RefCursor;
>

Ну а дальше добавляем GridView для показа полученных данных и SqlDataSource.

Более полный вид codebehind –

namespace testasp
<
public partial class _Default : System.Web.UI.Page
<

protected void UserSourse_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
<
((Oracle.DataAccess.Client.OracleParameter)e.Comma nd.Parameters[0]).OracleDbType = Oracle.DataAccess.Client.OracleDbType.RefCursor;
>

protected void Page_Load(object sender, EventArgs e)
<

Функция должна возвратить какое-либо значение, соответственно первым параметром будет ParameterDirection.ReturnValue. Важно отметить, что в данном случае в коде программы возвращаемый параметр объявляется первым, иначе получим исключение –

ORA-22060: аргумент [<0>] является недопустимым или неинициализированным целым

Вот собственно и всё по основам подключения.

Ссылка на основную публикацию
Adblock
detector