我在Windows 7x64上连接到Oracle数据库时遇到困难
我的环境如下:
我已将所有项目的目标CPU明确地设为x86 CPU(而不是Any或x86)
我正在使用DbProviderFactory.GetFactory
进行连接我的app.config中的My 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并不喜欢它安装的路径(即括号“Programs(x86)”)。这是同类的事情,还是有另一种说服甲骨文行为的方式。
答案 0 :(得分:5)
这可能是OCI客户端版本问题。请参阅https://community.oracle.com/message/11103466。
我看到了很多这方面的问题。大多数情况下,这与ODP.NET程序集(例如Oracle.DataAccess)有关,它与操作系统体系结构的版本不同(我们在这里讨论位)。
您可以采取以下措施:
安装32位和64位ODP.NET客户端工具(包括该架构的OCI),可从oracle.com免费下载。
为特定的处理器架构构建应用程序,例如32位。
使用不依赖于OCI的第三方Oracle客户端连接器(这就是问题所在)。我不建议这样做,因为这大部分时间都是昂贵的解决方案。
答案 1 :(得分:2)
哦,Oracle提供程序中可怕的括号。最简单的方法是使用更新版本的客户端修复问题。使用Oracle 10g数据库,您可以安全地使用最多12.1.x客户端(可在此处获取:64-bit Oracle Data Access Components)。
使用64位操作系统还有另一个技巧:首先安装32-bit版本的客户端,然后安装64位版本。这样,Office或旧的VS dev Web服务器等应用程序仍可正常运行。