codestory

Stellen Sie ohne Oracle Client eine Verbindung zur Oracle-Datenbank in C# her

  1. Die Vorstellung
  2. Die Überblick über die Verbindung aus C# in Oracle
  3. Die Bibliothek herunterladen
  4. Die Bibliothek ins Projekt kopieren
  5. Die Verbindung prüfen
  6. Der Umgang mit Oracle Database durch C#

1. Die Vorstellung

Der Unterlagen wird nach ... geschrieben
  • Visual Studio 2013, 2015
  • Oracle 11g, 12c

2. Die Überblick über die Verbindung aus C# in Oracle

Zuerst sollen Sie das Verbindungsmechanismus aus einem Programm C# in Database Oracle.kennen
Das Modell 1
In diesem Modell sollen Sie Oracle Client auf dem Computer,der C# läuft, installieren. Das ist eine Teil der Oracle, die auf dem Klient gelegt wird, um die Verbindung mit der Database von HauptOracle zu unterstützen. Wenn die Database Oracle in Ihrem Computer laufend C# gelegt wird, sollen Sie Oracle Client nicht installieren. Denn die Databse Oracle ist selbst ein Oracle Client. Die Kapazität von Oracle Client ist ca. 50MB.
Das Modell 2:
Das Modell 2 genehmigt Ihnen, direkt in Oracle zu verbinden, ohne die Installierung von Oracle Client auf dem C# laufenden Computer . Sie sollen einige Bibliothek DLL von Oracle client und einige Bibliothek ODAC XCopy ins Projekt kopieren.

Und Denn Oracle Client wird nicht benutzt, gibt es keine File tnsname.ora mit der Information der Database Oracle. Deshalb enthaltet Connection String die Parameter der Database wie die Inhalt von der File tnsname.ora.
// Connection String verbindet direkt mit 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. Die Bibliothek herunterladen

Beachten Sie: Sie können die heruntergeladete Version 32bit benutzen (auch für Ihr 64 bit Betriebssystem). Wenn Sie bei der Verwendung von Version 64 bit C# in Oracle verbinden, manchmal erscheint die folgenden Fehler:
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.
Obwohl das Betriebssystem in meinem Computer 64 bit ist, benutze ich aber das oben heruntergeladete ODAC 32bit

4. Die Bibliothek ins Projekt kopieren

Ich erstelle ein Projekt mit dem Name ConnectOracleWithoutClient:
Das Project wird erstellt
Diskomprimieren Sie die vorher heruntergeladeten Zip File
Die folgenden File kopieren
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
Direkt die oben gewähnten File in Ihrem Projekt auf Visual Studio:kopieren und kleben
Auf Visual Studio wählen Sie die File DLL und ihre Attribute formen
  • Copy to Output Directory: Copy if newer
Die Bibliothek anmelden und nach Oracle.DataAccess.dll.zuweisen

5. Die Verbindung prüfen

Die Klasse DBOracleUtils hat eine Utility Methode um direkt mit Oracle zur verbinden
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' verbindet direkt mit 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;
        }
    
    }
}
Eine Utility Klasse mit den Parameter verbindet Ihre Database 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();
        }
    }
}
Die Applikation durchführen

6. Der Umgang mit Oracle Database durch C#

Zunächst können Sie das Handbuch über Oracle mit der Benutzung C# sehen