Какой минимальный размер клиентского пространства необходим для подключения C# к базе данных Oracle?
Я успешно подключился к базе данных Oracle (10g) из C# (Visual Studio 2008), загрузив и установив инструменты администрирования клиента и Visual Studio 2008 на своем ноутбуке.
Установочная площадь для инструментов клиента Oracle превышала 200 МБ и была довольно длинной.
Кто-нибудь знает, каков минимальный осуществимый след? Я надеюсь, что это одна DLL и команда регистрации, но у меня есть ощущение, что мне нужно установить домашний оракул и установить различные переменные среды.
Я использую Oracle.DataAccess в моем коде.
8 ответов
Вам нужен клиент Oracle для подключения к базе данных Oracle. Самый простой способ - установить компоненты доступа к данным Oracle.
Чтобы свести к минимуму площадь, я предлагаю следующее:
- Используйте поставщика Microsoft для Oracle (System.Data.OracleClient), который поставляется с платформой.
- Загрузите пакет Oracle Instant Client - Basic Lite: это zip-файл с (почти) минимальным набором. Я рекомендую версию 10.2.0.4, которая намного меньше, чем версия 11.1.0.6.0.
- Разархивируйте следующие файлы в определенную папку:
- v10:
- oci.dll
- orannzsbb10.dll
- oraociicus10.dll
- v11:
- oci.dll
- orannzsbb11.dll
- oraociei11.dll
- v10:
- На платформе x86 добавьте библиотеку CRT DLL для Visual Studio 2003 (msvcr71.dll) в эту папку, так как Oracle ребята забыли прочитать это...
- Добавьте эту папку в переменную среды PATH.
- Используйте метод Easy Connect Naming в вашем приложении, чтобы избавиться от печально известного файла конфигурации TNSNAMES.ORA. Это выглядит так:
sales-server:1521/sales.us.acme.com
,
Это составляет около 19 МБ (v10).
Если вам не нужно делиться этой папкой между несколькими приложениями, альтернативой может быть отправка вышеупомянутых DLL вместе с бинарными файлами вашего приложения и пропустить шаг настройки PATH.
Если вам абсолютно необходимо использовать поставщика Oracle (Oracle.DataAccess), вам потребуется:
- ODP.NET 11.1.0.6.20 (первая версия, которая предположительно работает с Instant Client).
- Instant Client 11.1.0.6.0, очевидно.
Обратите внимание, что я не тестировал эту последнюю конфигурацию...
Начиная с 2014 года OPD.NET, управляемый драйвер, занимает наименьшую площадь.
Вот сравнение использования кода с неуправляемыми версиями, которые предлагали предыдущие (устаревшие) ответы: http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm
Вам нужно будет скачать эти библиотеки и ссылки Oracle.ManagedDataAccess.dll
в вашем проекте: Загрузите только версию Ocp.NET, управляемый драйвер Xcopy
Вот типичный отпечаток ноги, который вам нужно будет упаковать с выпуском:
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccessDTC.dll
все вместе, колоссальные 6,4 МБ для.Net 4.0.
Я использую метод, предложенный Pandicus выше, в Windows XP, используя ODAC 11.2.0.2.1. Шаги следующие:
- Загрузите пакет "ODAC 11.2 Release 3 (11.2.0.2.1) с развертыванием Xcopy" с веб-сайта oracle.com (53 МБ) и извлеките ZIP-архив.
- Соберите следующие библиотеки DLL: oci.dll (1 МБ), oraociei11.dll (130 МБ!), OraOps11w.dll (0,4 МБ), Oracle.DataAccess.dll (1 МБ). Остальные вещи могут быть удалены, и ничего не нужно устанавливать.
- Добавить ссылку на Oracle.DataAccess.dll, добавить
using Oracle.DataAccess.Client;
к вашему коду, и теперь вы можете использовать такие типы, какOracleConnection
,OracleCommand
а такжеOracleDataReader
для доступа к базе данных Oracle. См. Документацию класса для деталей. Нет необходимости использовать файл конфигурации tnsnames.ora, только строка подключения должна быть установлена правильно. - Выше 4 библиотеки DLL должны быть развернуты вместе с вашим исполняемым файлом.
Этот способ позволяет вам подключаться к ODP.net, используя 5 распространяемых файлов из Oracle:
Изменить: В случае, если блог все рушится, вот краткое резюме...
- oci.dll
- Oracle.DataAccess.dll
- oraociicus11.dll
- OraOps11w.dll
- orannzsbb11.dll
- oraocci11.dll
- OCIW32.DLL
убедитесь, что вы получаете ВСЕ эти DLL из одного и того же дистрибутива ODP.Net / ODAC, чтобы избежать конфликтов номеров версий, и поместите их в ту же папку, что и ваш EXE
DevArt http://www.devart.com/, ранее CoreLab (crlab.com), предоставляет клиент Oracle на чистом C#. Это одна DLL, и она отлично работает.
Вот обновление для Oracle 11.2.0.4.0. У меня был успех с помощью следующей процедуры на Windows 7 с помощью System.Data.OracleClient
,
1. Загрузите пакет Instant Client - Basic Lite: 32- разрядная или 64-разрядная версия Windows.
2. Скопируйте следующие файлы в папку в системном пути:
32-разрядный
1,036,288 2013-10-11 oci.dll
348,160 2013-10-11 ociw32.dll
1,290,240 2013-09-21 orannzsbb11.dll
562,688 2013-10-11 oraocci11.dll
36,286,464 2013-10-11 oraociicus11.dll
64-разрядный
691,712 2013-10-09 oci.dll
482,304 2013-10-09 ociw32.dll
1,603,072 2013-09-10 orannzsbb11.dll
1,235,456 2013-10-09 oraocci11.dll
45,935,104 2013-10-09 oraociicus11.dll
3. Создайте строку подключения, которая не требует использования tnsnames.ora.
(См. Примеры в тестовой программе ниже.)
4. Запустите эту минимальную C# программу для проверки вашей установки:
using System;
using System.Data;
using System.Data.OracleClient;
class TestOracleInstantClient
{
static public void Main(string[] args)
{
const string host = "yourhost.yourdomain.com";
const string serviceName = "yourservice.yourdomain.com";
const string userId = "foo";
const string password = "bar";
var conn = new OracleConnection();
// Construct a connection string using Method 1 or 2.
conn.ConnectionString =
GetConnectionStringMethod1(host, serviceName, userId, password);
try
{
conn.Open();
Console.WriteLine("Connection succeeded.");
// Do something with the connection.
conn.Close();
}
catch (Exception e)
{
Console.WriteLine("Connection failed: " + e.Message);
}
}
static private string GetConnectionStringMethod1(
string host,
string serviceName,
string userId,
string password
)
{
string format =
"SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST={0})(PORT=1521))" +
"(CONNECT_DATA=(SERVER=DEDICATED)" +
"(SERVICE_NAME={1})));" +
"uid={2};" +
"pwd={3};"; // assumes port is 1521 (the default)
return String.Format(format, host, serviceName, userId, password);
}
static private string GetConnectionStringMethod2(
string host,
string serviceName,
string userId,
string password
)
{
string format =
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST={0})(PORT=1521))" +
"(CONNECT_DATA=(SERVER=DEDICATED)" +
"(SERVICE_NAME={1})));" +
"User Id={2};" +
"Password={3};"; // assumes port is 1521 (the default)
return String.Format(format, host, serviceName, userId, password);
}
}
Последний совет: если вы столкнулись с ошибкой "System.Data.OracleClient требуется клиентское программное обеспечение Oracle версии 8.1.7", посмотрите этот вопрос.
ODAC xcopy поможет вам получить около 45 МБ. http://www.oracle.com/technology/software/tech/windows/odpnet/index.html
Я также нашел этот пост на форуме Oracle очень полезным:
Как настроить Oracle Instant Client с помощью Visual Studio
Примечание: команда ADO.NET устарела System.Data.OracleClient, поэтому для будущих проектов вы должны использовать ODP.NET
размножение:
Настройте следующие переменные среды:
- убедитесь, что в вашем PATH нет другого каталога оракула
- установите ваш путь к вашему мгновенному клиенту
- установите свой TNS_ADMIN, чтобы указать, где находится файл tnsnames.ora
- установите свой NLS_LANG
- установите ваш ORACLE_HOME для вашего мгновенного клиента
Для меня я установил NLS_LANG в
http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm
Я убедился, что это правильное клиентское программное обеспечение с помощью дополнения sqlplus для мгновенного клиента.
Для меня я установил: SET NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
Примечание. Прежде чем вносить какие-либо изменения, сделайте резервную копию раздела реестра Oracle (если он существует) и создайте резервную копию строки для любых переменных среды.