Лучшим решением, которое я нашел, было использование клиентской библиотеки Oracle Data Access и включение всей записи имен TNS в строку подключения.Это позволяет легко публиковать проект на веб-сервере, в ClickOnce и т. Д.
Вот шаги, необходимые для настройки драйвера Oracle, работающего в вашем проекте:
1)Получить библиотеки DLL из пакета «Поставщик данных Oracle для .NET»
Загрузить файл установщика из этого места: http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
Я установил ODAC на 200 МБ полностью с Oracle DeveloperИнструменты для Visual Studio, но вам действительно нужно только четыре DLL из этой загрузки.(Возможно, вы сможете извлечь их непосредственно из пакета установщика, вместо того чтобы проходить весь процесс установки, или, возможно, одна из загрузок меньшего размера включает в себя все из них.)
2) Справочные библиотеки DLL вваш проект
Найдите каталог установки клиента доступа к данным Oracle и перетащите следующие четыре 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.");
}
}
}
}