Най-доброто решение, което намерих, беше да използвам клиентската библиотека на Oracle Data Access и да включа целия запис на имената на TNS в низа за връзка. Това позволява проектът да бъде лесно публикуван на уеб сървър, ClickOnce и т.н.
Ето стъпките, необходими, за да настроите драйвера на Oracle да работи във вашия проект:
1) Вземете DLL от пакета „Oracle Data Provider for .NET“
Изтеглете инсталационния файл от това местоположение:http://www.oracle. com/technetwork/topics/dotnet/index-085163.html
Продължих и инсталирах пълния 200 MB ODAC с Oracle Developer Tools за Visual Studio, но наистина се нуждаете само от четири DLL от това изтегляне. (Възможно е да успеете да ги извлечете директно от инсталационния пакет, вместо да преминавате през целия процес на инсталиране, или може би едно от по-малките изтегляния включва всички тях.)
2) Референтни DLL файлове във вашия проект
Потърсете в инсталационната директория на Oracle Data Access Client и плъзнете следните четири DLL файлове в корена на вашия проект:
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
Задайте Копиране в изходна директория свойство на всички файлове с изключение на Oracle.DataAccess.dll за Копиране винаги .
Под Проект --> Добавяне на справка... , щракнете върху Преглед и изберете файла Oracle.DataAccess.dll.
3) Използвайте драйвера с пълен низ за връзка (по избор)
За да не се притеснявам, че файловете с имена на TNS се настройват на машините, на които е внедрено приложението, поставих цялата дефиниция във файла, както е показано от connectionstrings.com . Това прави низа за свързване малко обемист, но премахна много от главоболията на файловете с TNS имена, които изпитвах преди:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
Ето пълния клас, който използвах, за да тествам драйвера:
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.");
}
}
}
}