Подключиться к базе данных Oracle в C# без Oracle Client
View more Tutorials:
Статья основана на:
-
Visual Studio 2013, 2015
-
Oracle 11g, 12c
Во-первых, вам нужно понять принцип соединения с программы C# в Oracle Database.
Модель 1:
В этой модели на компьютере, на котором работает приложение C#, вам необходимо установить Oracle Client, это часть Oracle, которая устанавливается в клиенте для поддержки подключения к основной базе данных Oracle. Если база данных Oracle установлена на компьютере, на котором выполняется приложение C#, вам не нужно устанавливать Oracle Client так как сама база данных Oracle уже является Oracle Client. Объем Oracle-клиента составляет около 50 МБ.

Модель 2:
Модель 2 позволяет напрямую подключаться к Oracle без необходимости установки Oracle Client на компьютер, на котором выполняется приложение C#. Вам нужно скопировать некоторые DLL-библиотеки клиента Oracle и несколько библиотек ODAC XCopy в проект.
И поскольку не используется Oracle Client, нет файла tnsname.ora, содержащего информацию Oracle Database, поэтому Connection String должен содержать параметрыбазы данных, как содержание файла tnsname.ora.
И поскольку не используется Oracle Client, нет файла tnsname.ora, содержащего информацию Oracle Database, поэтому Connection String должен содержать параметрыбазы данных, как содержание файла tnsname.ora.
// Connection String подключается напрямую к Oracle. string connString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = " + host + ")(PORT = " + port + "))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = " + sid + ")));Password=" + password + ";User ID=" + user;




Если вы скачаете 64-битную версию:

Если вы скачаете 32-битную версию:


Результат скачивания:

Примечание: Вы можете использовать только что скачанную 32-Bit версию (даже если ваша операционная система является 64-Bit), если используете 64-Bit версию, иногда используя C# для подключения к Oracle, может появиться следующая ошибка:An unhandled exception of type 'System.BadImageFormatException' occurred in mscorlib.dll Additional information: Could not load file or assembly 'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Хотя мой компьютер является операционной системой 64bit, но я буду использовать ODAC 32bit, который только что был скачан в предыдущем шаге.
Я создал проект под названием ConnectOracleWithoutClient:

Проект создан:

Извелчь файл zip, который был вами скачан.


Скопируйте следующие файлы:
Directory | File Copy |
<DIR>/instantclient_12_1 | oci.dll |
orannzsbb12.dll | |
oraocci12.dll | |
oraocci12d.dll | |
oraociei12.dll | |
oraons.dll | |
<DIR>/odp.net4/odp.net/bin/4 | Oracle.DataAccess.dll |
<DIR>/oramts/bin | oramts.dll |
oramts12.dll | |
oramtsus.dll | |
<DIR>/odp.net4/bin | OraOps12.dll |
Скопируйте и вставьте файлы непосредственно в ваш проект на Visual Studio:

В Visual Studio, выберите все DLL файлы и настройте им свойства:
- Copy to Output Directory: Copy if newer

Объявите библиотеку, с ссылкой к Oracle.DataAccess.dll.




Класс DBOracleUtils имеет утилитарный метод для непосредственного подключения к Oracle.
DBOracleUtils.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Oracle.DataAccess.Client; namespace Tutorial.SqlConn { class DBOracleUtils { public static OracleConnection GetDBConnection(string host, int port, String sid, String user, String password) { Console.WriteLine("Getting Connection ..."); // 'Connection String' подключается напрямую к Oracle. string connString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = " + host + ")(PORT = " + port + "))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = " + sid + ")));Password=" + password + ";User ID=" + user; OracleConnection conn = new OracleConnection(); conn.ConnectionString = connString; return conn; } } }
Утилитарный класс с параметрами для подключения к вашей базе данных Oracle:
DBUtils.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Oracle.DataAccess.Client; namespace Tutorial.SqlConn { class DBUtils { public static OracleConnection GetDBConnection() { string host = "192.168.205.1"; int port = 1521; string sid = "db12c"; string user = "simplehr"; string password = "12345"; return DBOracleUtils.GetDBConnection(host, port, sid, user, password); } } }
Test Oracle Connection:
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Oracle.DataAccess.Client; using Tutorial.SqlConn; namespace ConnectOracleWithoutClient { static class Program { static void Main(string[] args) { // OracleConnection conn = DBUtils.GetDBConnection(); Console.WriteLine("Get Connection: " + conn); try { conn.Open(); Console.WriteLine(conn.ConnectionString, "Successful Connection"); } catch (Exception ex) { Console.WriteLine("## ERROR: " + ex.Message); Console.Read(); return; } Console.WriteLine("Connection successful!"); Console.Read(); } } }
Запуск приложения:

Далее вы можете посмотреть статью руководства работы с базой данных Oracle используя C#: