Подключиться к базе данных Oracle в C# без Oracle Client
2. Обзор соединения из C# в Oracle
Во-первых, вам нужно понять принцип соединения с программы C# в Oracle Database.
Модель 1:
В этой модели на компьютере, на котором работает приложение C#, вам необходимо установить OracleClient, это часть Oracle, которая устанавливается в клиенте для поддержки подключения к основной базе данных Oracle. Если база данных Oracle установлена на компьютере, на котором выполняется приложение C#, вам не нужно устанавливать OracleClient так как сама база данных Oracle уже является OracleClient. Объем 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;

3. Скачать библиотеку
Примечание: Вы можете использовать только что скачанную 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, но я буду использовать ODAC32bit, который только что был скачан в предыдущем шаге.
4. Копировать библиотеки в Project
Я создал проект под названием ConnectOracleWithoutClient:

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

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


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

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

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




5. Проверка Подключения
Класс 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();
}
}
}
Запуск приложения:

Pуководства C#
- Наследование и полиморфизм в C#
- Что мне нужно для начала работы с C#?
- Быстрый обучение C# для начинающих
- Установите Visual Studio 2013 в Windows
- Абстрактный класс и Interface в C#
- Установите Visual Studio 2015 в Windows
- Сжатие и декомпрессия в C#
- Руководство по программированию многопоточности C#
- Руководство C# Delegate и Event
- Установите AnkhSVN в Windows
- Программирование C# для группы использующей Visual Studio и SVN
- Установить .Net Framework
- Access Modifier (Модификатор доступа) в C#
- Руководство C# String и StringBuilder
- Руководство C# Property
- Руководство C# Enum
- Руководство C# Structure
- Руководство C# Generics
- Обработка исключений для C#
- Руководство C# Date Time
- Манипулирование файлами и каталогами в C#
- Руководство CSharp Streams - двоичные потоки в C#
- Руководство Регулярное выражение C#
- Подключиться к базе данных SQL Server в C#
- Работа с базой данных SQL Server на C#
- Подключиться к базе данных MySQL в C#
- Работа с базой данных MySQL на C#
- Подключиться к базе данных Oracle в C# без Oracle Client
- Работа с базой данных Oracle на C#
Show More