Какова минимальная площадь клиента, необходимая для подключения C# к базе данных Oracle?
Вопрос
Я успешно подключился к базе данных Oracle (10g) из C# (Visual Studio 2008), загрузив и установив на свой ноутбук инструменты администрирования клиентов и Visual Studio 2008.
Установка инструментов Oracle Client заняла более 200 МБ и была довольно долгой.
Кто-нибудь знает, какова минимальная работоспособная площадь?Я надеюсь, что это одна DLL и команда регистрации, но у меня такое ощущение, что мне нужно установить домашний каталог оракула и установить различные переменные среды.
Я использую Oracle.DataAccess в своем коде.
Решение
Вам нужен клиент Oracle для подключения к базе данных Oracle.Самый простой способ – установить Компоненты доступа к данным Oracle.
Чтобы минимизировать последствия, я предлагаю следующее:
- Используйте поставщика Microsoft для Oracle (System.Data.OracleClient), который поставляется с платформой.
- Загрузите Пакет мгновенного клиента Oracle - Базовый облегченный:это 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.
- Использовать Простое именование подключения в вашем приложении, чтобы избавиться от печально известного файла конфигурации 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).
- Мгновенный клиент 11.1.0.6.0, очевидно.
Обратите внимание, что я не тестировал эту последнюю конфигурацию...
Другие советы
По состоянию на 2014 год управляемый драйвер OPD.NET имеет наименьший размер.
Вот сравнение использования кода с неуправляемыми версиями, которые предлагались в предыдущих (устаревших) ответах:http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
Вам нужно будет загрузить эти библиотеки DLL и ссылку. Oracle.ManagedDataAccess.dll
в вашем проекте:Загрузите ODP.NET, только версия Xcopy управляемого драйвера
Вот типичный отпечаток, который вам нужно будет упаковать вместе с релизом:
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccessDTC.dll
все вместе, а колоссальный 6,4 МБ для .Net 4.0.
Я использую метод, предложенный Пандикусом выше, в 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-файл.
ДевАрт http://www.devart.com/, ранее CoreLab (crlab.com) поставлял клиент Oracle на чистом C#.Это одна dll, и она работает нормально.
Вот обновление для Оракул 11.2.0.4.0.Мне удалось выполнить следующую процедуру на Windows 7 с использованием System.Data.OracleClient
.
1. Скачать Пакет мгновенного клиента — Basic Lite: Windows 32-битная или 64-битный.
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 нет другого каталога oracle
- установите свой ПУТЬ чтобы указать на вашего мгновенного клиента
- установите свой TNS_ADMIN Чтобы указать на то, где вы находитесь в файле tnsnames.ora
- установите свой НЛС_ЯЗЫК
- установите свой ORACLE_HOME вашему мгновенному клиенту
Лично я установил для NLS_LANG значение
http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm#634282
Я проверил, что используется правильное клиентское программное обеспечение, используя надстройку sqlplus для мгновенного клиента.
Для себя я установил:SET NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
Примечание:прежде чем вносить какие-либо изменения, создайте резервную копию ключа реестра Oracle (если он существует) и создайте резервную копию строки для любых переменных среды.
Прочтите часто задаваемые вопросы по Oracle Instant Client здесь.