Oracle Client providers
Pro přistup k Oracle Database serveru z .NETu jsme mohli používat ADO.NET třídy v namespace System.Data.OracleClientv assembly System.Data.OracleClient.dll. Tento namespace je však od FW 4.0 označen za deprecated (zastaralý). Microsoft ho už nepodporuje, a dá se očekávat, že bude v některé následující verzi .NET Frameworku odstraněn úplně (nicméně ve verzi 4.5 se tak ještě nestalo).
V msdn se dočtete, že jako náhradu máme používat third-party provider přímo od Oracle. Tento provider se jmenuje Oracle Data Provider for .NET, zkráceně ODP.NET. Provider je obsažen v assembly Oracle.DataAccess.dll a jeho třídy jsou v namespace Oracle.DataAccess.Client.
Kromě Microsoft a Oracle ADO.NET providerů existují i jiné, jako DataDirect nebo DevArt, ty jsou však placené.
Instalace klienta Oracle Data Access Components na x64 Windows
Pro přístupu k Oracle Database (ať už z .NETu nebo z jiných aplikacích) musíme nainstalovat Oracle client software (přesněji komponentu Oracle Database Instant Client). Nejjednodušší je pro klientský počítač použít jediný instalační balíček s názvem Oracle Data Access Components (ODAC), který kromě Oracle Instant Client obsahuje zároveň i ODP.NET provider.
Pozn.: Balíček ODAC lze instalovat i přes existující instalaci Oracle Database Client, která oproti ODAC obsahuje některé klientské nástroje. Pro přístup k Oracle Database jinak ale tuto instalaci nepotřebujeme.
Nyní zde popíši postup instalace Oracle Data Access Components (ODAC) na 64-bit Windows operační systém. Aby totiž fungoval přístup jak z x86 i x64 procesů je potřeba nainstalovat obě verze ODAC, a to do rozdílných adresářů.
- Nejprve začneme s 64-bit ODAC instalaci, z těchto stránek stáhneme balíček 64-bit ODAC for Windows x64 (v době psaní článku se jedná o verzi 11.2 Release 5 - 11.2.0.3.20, soubor ODAC1120320_x64.zip).
- ZIP soubor rozpakujeme a spustíme instalaci.
- Zvolíme instalaci Oracle Data Access Components for Oracle Client.
- Můžeme změnit výchozí umístění, já jsem použil hlavní umístění C:\Oracle, OraClient11g_home_x64 Oracle Home a C:\Oracle\product\11.2.0\client_x64 Oracle Home directory.
- Zvolíme instalované komponenty, pokud vám stačí minimum, zaškrtněte pouze Oracle Data Provider for .NET, Oracle Provider for OLE DB a Oracle Instant Client.
- Potvrdíme a necháme instalaci doběhnout.
- Nyní stáhneme 32-bit instalaci zde, balíček ODAC with Oracle Developer Tools for Visual Studio (v době psaní článku se jedná konkrétně o soubor ODTwithODAC1120320_32bit.zip).
- ZIP soubor rozpakujeme a spustíme instalaci, opět zvolíme Oracle Data Access Components for Oracle Client.
- Hlavní umístění nastavíme stejné jako při instalaci 64-bit verze, ale je zde nutné zvolit jiný Oracle Home a hlavně jiný Oracle Home directory, například OraClient11g_home_x86 a C:\Oracle\product\11.2.0\client_x86.
- Zvolíme stejné komponenty jako u 64-bit instalaci, navíc je zde možnost nainstalovat Oracle Developer Tools for Visual Studio.
- Instalaci necháme dokončit.
- Do obou Oracle home adresářů do podsložky Network\Admin (tedy c:\Oracle\product\11.2.0\client_x64\Network\Admin a c:\Oracle\product\11.2.0\client_x86\Network\Admin) nahrajeme nebo vytvoříme soubor TNSNAMES.ORA s informacemi pro připojení k Oracle Database server. Vzhledem k absenci nástrojů musíme soubor vytvořit ručně, není to ale nic složitého (pro pomoc můžete využít tento příklad).
Ověření funkčnosti
Funkčnost instalací a správné nastavení TNSNAMES.ORA můžete ověřit nejprve připojením pomoci příkazu sqlplus user/password@addressname, například tedy:
sqlplus sys/manager@ora11 as sysdba
A přístup z .NETu přes ODP.NET provider následujícím kódem:
private void Test()
{
string connectionString = "User Id=sys;Password=manager;Data Source=ORA11;DBA Privilege=SYSDBA";
Oracle.DataAccess.Client.OracleConnection connection = null;
try
{
connection = new Oracle.DataAccess.Client.OracleConnection(connectionString);
connection.Open();
using (var reader = new Oracle.DataAccess.Client.OracleCommand("SELECT * FROM dba_users", connection).ExecuteReader())
{
while (reader.Read())
{
string username = (string)reader["username"];
Console.WriteLine(username);
}
}
}
finally
{
if (connection != null)
{
connection.Close();
}
}
}
Do projektu musíme přidat referenci na assembly Oracle.DataAccess.dll, která se nám instalací zaregistrovala do GAC (z adresáře c:\Oracle\product\11.2.0\client_x86\odp.net\bin\4).
Pokud vše proběhlo v pořádku, bude kód funkční jak pod nastaveném Any CPU tak i pod x86.
Pozn.: Při kompilaci pro Any CPU se může zobrazit následující warning: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86", "x86",
ten můžeme ignorovat, protože proces opravdu bude x64 na 64-bit systému a použije se správný Oracle client.