Какая минимальная площадь клиента требуется для подключения C # к базе данных Oracle?

68

Я успешно подключился к базе данных Oracle (10g) из С# (Visual Studio 2008), загрузив и установив инструменты для администрирования клиентов и Visual Studio 2008 на своем ноутбуке.

Отладка установки для инструментов Oracle Client была более 200 МБ и довольно длинная.

Кто-нибудь знает, каков минимальный эффективный след? Я надеюсь, что это одна DLL и команда register, но мне кажется, что мне нужно установить дом oracle и установить различные переменные среды.

Я использую Oracle.DataAccess в своем коде.

  • 21
    Как новичок в Oracle, для меня это был настоящий кошмар, когда я нашел и установил все нужные мне компоненты и библиотеки. Я не могу понять, как Oracle не могла предоставить такую «посредственную» поддержку разработчикам .NET ...
  • 0
    @ecoe Спасибо, что снова посетили этот вопрос. Ваш ответ stackoverflow.com/a/26469797/6910, кажется, наименьший след до сих пор.
Показать ещё 1 комментарий
Теги:
client

8 ответов

72
Лучший ответ

Вам нужен клиент Oracle для подключения к базе данных Oracle. Самый простой способ - установить Oracle Data Access Components.

Чтобы свести к минимуму след, я предлагаю следующее:

  • Используйте поставщика Microsoft для Oracle (System.Data.OracleClient), который поставляется с фреймворком.
  • Загрузите Oracle Instant Client Package - 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
  • На платформе x86 добавьте в эту папку DLL CRT для Visual Studio 2003 (msvcr71.dll), поскольку ребята из Oracle забыли прочитать это...
  • Добавьте эту папку в переменную среды PATH.
  • Используйте метод Easy Connect Naming в вашем приложении, чтобы избавиться от печально известного файла конфигурации TNSNAMES.ORA. Он выглядит так: sales-server:1521/sales.us.acme.com.

Это примерно 19Mb (v10).

Если вы не разделяете эту папку между несколькими приложениями, альтернативой будет отправка вышеупомянутых библиотек DLL вместе с вашими бинарными приложениями и пропустить шаг установки PATH.

Если вам абсолютно необходимо использовать поставщика Oracle (Oracle.DataAccess), вам понадобится:

  • ODP.NET 11.1.0.6.20 (первая версия, которая предположительно работает с Instant Client).
  • Мгновенный клиент 11.1.0.6.0, очевидно.

Обратите внимание, что я не тестировал эту последнюю конфигурацию...

  • 1
    с помощью Visual Studio 2005 я добился успеха без выполнения шагов 4 или 5
  • 0
    Можно ли просто включить dll в ваше приложение с точки зрения лицензирования?
Показать ещё 4 комментария
15

Начиная с 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.

  • 0
    Вы также можете скачать Oracle.ManagedDataAccess.dll через NuGet.
  • 0
    +1000 простейшее решение; обратите внимание на «использование Oracle.ManagedDataAccess.Client;»
Показать ещё 1 комментарий
15

Я использую метод, предложенный Pandicus выше, в Windows XP, используя ODAC 11.2.0.2.1. Эти шаги заключаются в следующем:

  • Загрузите пакет "ODAC 11.2 Release 3 (11.2.0.2.1) с пакетом Xcopy Deployment" с oracle.com(53 МБ) и извлеките ZIP.
  • Соберите следующие DLL файлы: oci.dll(1 MB), oraociei11.dll(130 МБ!), OraOps11w.dll(0.4 MB), Oracle.DataAccess.dll(1 MB). Остальные вещи можно удалить, и ничего не нужно устанавливать.
  • Добавьте ссылку на Oracle.DataAccess.dll, добавьте using Oracle.DataAccess.Client; в свой код, и теперь вы можете использовать такие типы, как OracleConnection, OracleCommand и OracleDataReader для доступа к базе данных Oracle. Подробнее см. В документации по . Нет необходимости использовать конфигурационный файл tnsnames.ora, должна быть установлена ​​только строка подключения
  • 3
    Я нашел этот подход к работе. Очевидным недостатком является то, что oraociei11.dll теперь 130 МБ, начиная с v11.2 :(
14

Этот способ позволяет вам подключаться к ODP.net с использованием 5 распространяемых файлов из oracle:

Запись в блог Chris: использование нового ODP.Net для доступа к Oracle с С# с простым развертыванием

Изменить: в случае, если каждый блог опускается, вот краткий обзор...

  • oci.dll
  • Oracle.DataAccess.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • OCIW32.DLL

убедитесь, что вы получаете ВСЕ эти DLL из одного и того же дистрибутива ODP.Net/ODAC, чтобы избежать конфликтов номеров версий, и поместите их все в ту же папку, что и EXE

  • 0
    В статье говорится: «Файл TnsNames.Ora не нужен» ... но это просто означает, что он не может переводить имена баз данных.
8

DevArt http://www.devart.com/, ранее CoreLab (crlab.com) поставляет клиент с чистым С# Oracle. Это единственная dll, и она отлично работает.

  • 0
    На самом деле это очень близко к тому, что я хочу. В идеале я бы хотел решения только для Oracle, но я исследую это.
  • 0
    И это не требует локальной установки Oracle Client?
Показать ещё 1 комментарий
3

Ниже приведено обновление для Oracle 11.2.0.4.0. Мне удалось выполнить следующую процедуру на Windows 7 с помощью System.Data.OracleClient.

1. Загрузите Instant Client Package - 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. Запустите эту минимальную программу С#, чтобы протестировать вашу установку:

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", см. этот вопрос.

  • 0
    В нем говорится: System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или выше.
  • 0
    @NimeCloud: Одна из возможностей заключается в том, что это может быть проблема с правами доступа к файловой системе, которая препятствует доступу вашей программы к Oracle DLL. Смотрите эту статью и эту .
3

ODAC xcopy избавит вас от около 45 МБ. http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

2

Я нашел этот пост на форуме Oracle очень полезным:

Как настроить Oracle Instant Client с помощью Visual Studio

Примечание: команда ADO.NET обесценивает System.Data.OracleClient, поэтому для будущих проектов вы должны использовать ODP.NET

Размножение:

Установите следующие переменные среды:

  • убедитесь, что в вашем PATH нет другого каталога оракула
  • установите PATH, чтобы указать на ваш мгновенный клиент
  • установите TNS_ADMIN, чтобы указать, где находится файл tnsnames.ora. расположенный
  • установите NLS_LANG
  • установите ваш ORACLE_HOME для вашего мгновенного клиента

Для меня я установил NLS_LANG в

http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm#634282

Я подтвердил, что это использовало правильное клиентское программное обеспечение, используя надстройку sqlplus для мгновенного клиента.

Для меня я установил: SET NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252

Примечание: перед внесением каких-либо изменений создайте резервную копию своего раздела реестра Oracle (если есть) и создайте резервную копию для любых переменных среды.

Прочитайте здесь FAQ о мгновенном клиенте Oracle

Ещё вопросы

Сообщество Overcoder
Наверх
Меню