De beste oplossing die ik vond, was om de Oracle Data Access Client-bibliotheek te gebruiken en de volledige vermelding van de TNS-namen in de verbindingsreeks op te nemen. Hierdoor kan het project gemakkelijk worden gepubliceerd op een webserver, ClickOnce, enz.
Hier zijn de stappen die nodig zijn om het Oracle-stuurprogramma in uw project in te stellen:
1) DLL's ophalen van het pakket 'Oracle Data Provider for .NET'
Download het installatiebestand vanaf deze locatie:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html
Ik ging door en installeerde de volledige 200 MB ODAC met Oracle Developer Tools for Visual Studio, maar je hebt echt maar vier DLL's nodig van deze download. (Misschien kunt u ze rechtstreeks uit het installatiepakket halen, in plaats van het hele installatieproces te doorlopen, of misschien bevat een van de kleinere downloads ze allemaal.)
2) Verwijs naar DLL's in uw project
Zoek in de installatiemap van de Oracle Data Access Client en sleep de volgende vier DLL's naar de hoofdmap van uw project:
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
Stel de Kopiëren naar uitvoermap . in eigendom van alle bestanden behalve Oracle.DataAccess.dll om Kopieer altijd .
Onder Project --> Voeg referentie toe... , klik op de Bladeren en selecteer het bestand Oracle.DataAccess.dll.
3) Gebruik het stuurprogramma met volledige verbindingsreeks (optioneel)
Om me geen zorgen te hoeven maken dat TNS-naambestanden worden ingesteld op de machines waarop de applicatie is geïmplementeerd, heb ik de volledige definitie in het bestand geplaatst zoals getoond door connectionstrings.com . Het maakt de verbindingsreeks een beetje omvangrijk, maar verwijderde veel van de TNS Names-bestandshoofdpijn die ik eerder had:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
Dit is de volledige klasse die ik heb gebruikt om de bestuurder te testen:
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.");
}
}
}
}