如何在我的开发环境中从Windows 7 x64上的C#连接到Oracle数据库

我在Windows 7×64上连接到Oracle数据库时遇到了困难

我的环境如下:

  • Windows 7×64
  • Visual Studio 2012
  • Oracle 10g(带32位客户端)
  • 的WinForms

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

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

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

 

(我已尝试使用各种样式的连接字符串但没有成功)

当我编译应用程序时,如果我从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 7×64上看到过与Visual Basic 6类似的东西,而Oracle并不喜欢它安装的路径(即括号“Programs(x86)”)。 这是同类的事情,还是有另一种说服Oracle行事的方式。

哦,Oracle提供程序中可怕的括号。 最简单的方法是使用更新版本的客户端修复问题。 使用Oracle 10g数据库,您可以安全地使用最多12.1.x客户端(此处可用: 64位Oracle数据访问组件 )。

使用64位操作系统还有另一个技巧:首先安装32位版本的客户端,然后安装64位版本。 这样一些应用程序,如Office或旧VS开发Web服务器仍然可以工作。

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

我看到了很多这方面的问题。 大多数情况下,这与ODP.NET程序集(例如Oracle.DataAccess)有关,而ODP.NET程序集与操作系统体系结构的版本不同(我们在这里讨论位)。

你可以做一些事情:

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

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

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