Как подключиться к базе данных Oracle из С# в Windows 7 x64 в моей среде разработки

У меня возникли трудности с подключением к базе данных Oracle в Windows 7x64

Моя среда выглядит следующим образом:

  • Windows 7x64
  • Visual Studio 2012
  • Oracle 10g (с 32-разрядным клиентом)
  • WinForms

Я сделал целевой процессор всех проектов явно CPU x86 (в отличие от Any или x86)

Я подключаюсь к DbProviderFactory.GetFactory

Моя запись ConnectionString в моем app.config выглядит так:

<add name="MYORACLE"
connectionString = "User ID=MYPASSWORD;Password=MYPASSWORd;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MYHOST)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MYSERVICE)));"
providerName="System.Data.OracleClient" />

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

Когда я компилирую приложение, он может нормально подключиться, если я запустил исполняемый файл из папки Debug. Однако, если я пытаюсь запустить его в Visual Studio, он не работает, когда я открываю соединение

ORA-06413: Connection not open.\n

Вот пример того, как он называется:

[TestMethod]
public void ConnectToOracle_Success()
{
    var connectionStringSettings = ConnectionBuilder.GetConnectionStringSetting(OracleConnectionName);
    var providerFactory = ConnectionBuilder.GetProviderFactory(connectionStringSettings);
    ConnectionBuilder.ValidateConnectionString(connectionStringSettings);
    using (var connection = providerFactory.CreateConnection())
    {
        Assert.IsNotNull(connection);
        connection.ConnectionString = connectionStringSettings.ConnectionString;
        try
        {
             connection.Open();
        }
        catch (Exception e)
        {
            Assert.Equals(e.Message, "");
        }
    }
}

Я видел что-то подобное с Visual Basic 6 в Windows 7x64, а Oracle не нравится пути, на которых он был установлен (т.е. в скобках "Программы (x86)" ). Это то же самое, или есть другой способ убедить Oracle вести себя.

Ответ 1

О, страшная скобка в поставщике Oracle. Самый простой способ - использовать более новую версию клиента, где проблема была исправлена. С базой данных Oracle 10g вы можете безопасно использовать до 12.1.x клиент (здесь: 64-разрядные компоненты доступа к данным Oracle).

В 64-битном os есть еще один трюк, который я использовал: сначала установите 32-bit версию клиента, а поверх нее установите 64 -битной версии. Таким образом, некоторые приложения, такие как Office или старый веб-сервер VS dev, по-прежнему будут работать.

Ответ 2

Это может быть проблема с версией клиента OCI. См. https://community.oracle.com/message/11103466.

Я видел много проблем с этим. В большинстве случаев это связано с сборкой ODP.NET(например, Oracle.DataAccess), которая находится в другой версии, а затем в архитектуре операционной системы (здесь мы говорим о битах).

Есть несколько вещей, которые вы могли бы сделать по этому поводу:

  • Установите оба 32- и 64-битных клиентских инструмента ODP.NET(включая OCI для этой архитектуры), которые можно загрузить с oracle.com.

  • Создайте приложение для конкретной архитектуры процессора, например 32-разрядной.

  • Используйте сторонний клиентский соединитель Oracle, который не зависит от OCI (это то, что дает проблемы). Я бы не рекомендовал этого, так как это в большинстве случаев дорогостоящее решение.