Den bästa lösningen jag hittade var att använda Oracle Data Access Client-biblioteket och inkludera hela TNS-namnposten i anslutningssträngen. Detta gör att projektet enkelt kan publiceras till en webbserver, ClickOnce, etc.
Här är stegen som krävs för att ställa in Oracle-drivrutinen som fungerar i ditt projekt:
1) Hämta DLL-filer från paketet "Oracle Data Provider for .NET"
Ladda ner installationsfilen från denna plats:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html
Jag gick vidare och installerade hela 200 MB ODAC med Oracle Developer Tools for Visual Studio, men du behöver egentligen bara fyra DLL-filer från den här nedladdningen. (Du kanske kan extrahera dem direkt från installationspaketet, istället för att gå igenom hela installationsprocessen, eller så kanske en av de mindre nedladdningarna inkluderar dem alla.)
2) Referera till DLL-filer i ditt projekt
Sök i installationskatalogen för Oracle Data Access Client och dra följande fyra DLL:er till roten av ditt projekt:
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
Ställ in Kopiera till utdatakatalog äga alla filer utom Oracle.DataAccess.dll till Kopiera alltid .
Under Projekt --> Lägg till referens... klickar du på Bläddra fliken och välj filen Oracle.DataAccess.dll.
3) Använd drivrutinen med fullständig anslutningssträng (valfritt)
För att inte behöva oroa dig för att TNS-namnfiler ställs in på de maskiner som programmet distribuerades till, lägger jag in hela definitionen i filen som visas av connectionstrings.com . Det gör anslutningssträngen lite skrymmande, men tog bort mycket av TNS Names-filhuvudvärken som jag upplevde tidigare:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
Här är hela klassen jag använde för att testa drivrutinen:
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.");
}
}
}
}