【问题标题】:How can I connect to an Oracle Database from C# on Windows 7 x64 in my development environment如何在我的开发环境中从 Windows 7 x64 上的 C# 连接到 Oracle 数据库
【发布时间】:2014-01-12 22:24:19
【问题描述】:

我在连接到 Windows 7x64 上的 Oracle 数据库时遇到困难

我的环境如下:

  • Windows 7x64
  • Visual Studio 2012
  • Oracle 10g(带有 32 位客户端)
  • WinForms

我已将所有项目的目标 CPU 明确设为 x86 CPU(而不是 Any 或 x86)

我正在使用 DbProviderFactory.GetFactory 进行连接

我的 app.config 中的 ConnectionString 条目如下所示:

<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, "");
        }
    }
}

我在 Windows 7x64 上看到了与 Visual Basic 6 类似的东西,而 Oracle 不喜欢它的安装路径(即括号“程序 (x86)”)。这是同一类事情,还是有其他方法可以说服 Oracle 采取行动。

【问题讨论】:

  • 当您到达代码 sn-p 中的 connection.Open() 行时,您得到的是 ORA-06413 错误吗?
  • 是的,您在连接字符串中的任何位置是否有 Programs (x86)?
  • 控制台应用?赢得表格?
  • 问题出在(x86)括号上。尝试在 Programs(x86) 文件夹之外重新安装应用程序。
  • ORA-06413 似乎是到达 Open() 行时得到的结果

标签: c# oracle visual-studio visual-studio-2012 windows-7-x64


【解决方案1】:

这可能是 OCI 客户端版本问题。见https://community.oracle.com/message/11103466

我已经看到了很多与此相关的问题。大多数情况下,这与 ODP.NET 程序集(例如 Oracle.DataAccess)有关,该程序集的版本与操作系统架构不同(我们在这里讨论的是位)。

你可以做一些事情:

  1. 安装 32 位和 64 位 ODP.NET 客户端工具(包括该架构的 OCI),可从 oracle.com 免费下载。

  2. 为特定的处理器架构构建您的应用程序,例如 32 位。

  3. 使用不依赖于 OCI 的第三方 Oracle 客户端连接器(这就是问题所在)。我不建议这样做,因为大多数时候这是昂贵的解决方案。

【讨论】:

  • Patrick - 抱歉,我错过了你的答案,我正在处理它。
【解决方案2】:

哦,Oracle 提供程序中可怕的括号。最简单的解决方法是使用已修复问题的较新版本的客户端。使用 Oracle 10g 数据库,您可以安全地使用高达 12.1.x 的客户端(可在此处获得:64-bit Oracle Data Access Components)。

对于 64 位操作系统,我使用了另一个技巧:首先安装 32-bit 版本的客户端,然后安装 64 位版本。这样一来,Office 或旧版 VS 开发 Web 服务器等应用程序仍然可以运行。

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2014-05-30
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多