betacode

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

  1. Введение
  2. Обзор соединения из C# в Oracle
  3. Скачать библиотеку
  4. Копировать библиотеки в Project
  5. Проверка Подключения
  6. Работа с Oracle Database используя C#

1. Введение

Статья основана на:
  • Visual Studio 2013, 2015
  • Oracle 11g, 12c

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

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

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

Pуководства C#

Show More