Nejlepším řešením, které jsem našel, bylo použít knihovnu Oracle Data Access Client a zahrnout celý záznam názvů TNS do připojovacího řetězce. To umožňuje snadnou publikaci projektu na webový server, ClickOnce atd.
Zde jsou kroky potřebné k nastavení ovladače Oracle pracujícího ve vašem projektu:
1) Získejte knihovny DLL z balíčku 'Oracle Data Provider for .NET'
Stáhněte si instalační soubor z tohoto umístění:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html
Pokračoval jsem a nainstaloval jsem plných 200 MB ODAC pomocí nástrojů Oracle Developer Tools for Visual Studio, ale z tohoto stažení opravdu potřebujete pouze čtyři knihovny DLL. (Možná je budete moci extrahovat přímo z instalačního balíčku, místo abyste procházeli celým instalačním procesem, nebo možná jeden z menších souborů ke stažení je obsahuje všechny.)
2) Referenční knihovny DLL ve vašem projektu
Prohledejte instalační adresář klienta Oracle Data Access Client a přetáhněte následující čtyři knihovny DLL do kořenového adresáře vašeho projektu:
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
Nastavte Kopírovat do výstupního adresáře vlastnost všechny soubory kromě Oracle.DataAccess.dll na Kopírovat vždy .
V části Projekt --> Přidat referenci... , klikněte na tlačítko Procházet a vyberte soubor Oracle.DataAccess.dll.
3) Použijte ovladač s úplným připojovacím řetězcem (volitelné)
Abych se nemusel starat o nastavování souborů názvů TNS na počítačích, na kterých byla aplikace nasazena, vložil jsem celou definici do souboru, jak ukazuje connectionstrings.com . Díky tomu je připojovací řetězec trochu objemný, ale odstranilo to mnoho bolestí hlavy ze souboru TNS Names, které jsem zažíval dříve:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
Zde je celá třída, kterou jsem použil k testování ovladače:
using System;
using System.Data;
using Oracle.DataAccess.Client;
static class Program
{
[STAThread]
static void Main()
{
TestOracle();
}
private static void TestOracle()
{
string connString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=servername)(PORT=1521)))" +
"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+
"User Id=username;Password=********;";
using (OracleConnection conn = new OracleConnection(connString))
{
string sqlSelect = "SELECT * FROM TEST_TABLE";
using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
{
var table = new DataTable();
da.Fill(table);
if (table.Rows.Count > 1)
Console.WriteLine("Successfully read oracle.");
}
}
}
}