Подключение к базе данных Oracle с использованием C# без Oracle Client

1- Введение

Статья основана на:
  • Visual Studio 2013, 2015

  • Oracle 11g, 12c

2- Обзор соединения из C# в Oracle

Во-первых, вам нужно понять принцип соединения с программы  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.
// 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- Скачать библиотеку

Если вы скачаете 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, который только что был скачан в предыдущем шаге.

4- Копировать библиотеки в Project

Я создал проект под названием 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.

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();
        }
    }
}
Запуск приложения:

6- Работа с Oracle Database используя C#

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