C# 调用Oracle.DataAccess.Client.OracleConnection.Open()时发生System.Runtime.InteropServices.ExternalException异常

C# 调用Oracle.DataAccess.Client.OracleConnection.Open()时发生System.Runtime.InteropServices.ExternalException异常,c#,oracle,odp.net,odac,C#,Oracle,Odp.net,Odac,我有以下代码可以使用ODP.net连接到数据库: //删除连接信息以保护敏感信息 字符串host=“*******”; 字符串sid=“*******”; string connectDescriptor=string.Format(“(描述=(地址=(协议=tcp)(主机={0})(端口=1521))(连接数据=(SID={1}))”,主机,SID); 字符串username=“*******”; 字符串密码=“*******”; string connectionString=string.

我有以下代码可以使用ODP.net连接到数据库:

//删除连接信息以保护敏感信息
字符串host=“*******”;
字符串sid=“*******”;
string connectDescriptor=string.Format(“(描述=(地址=(协议=tcp)(主机={0})(端口=1521))(连接数据=(SID={1}))”,主机,SID);
字符串username=“*******”;
字符串密码=“*******”;
string connectionString=string.Format(“数据源={0};用户ID={1};密码={2};”,connectDescriptor,用户名,密码);
OracleConnection conn=null;
尝试
{
conn=新的OracleConnection(connectionString);
conn.Open();
}
捕获(OracleException oraex)
{
MessageBox.Show(oraex.ErrorCode+“:”+oraex.Message);
}
最后
{
康涅狄格州关闭();
}
调用
Open()
oraex.ErrorCode
-2147467259
oraex.Message
。尝试访问引发的异常的大多数成员会导致
NullReferenceException

此外,我可以看到基本异常是一个
System.Runtime.InteropServices.ExternalException

这是怎么回事?由于
InteropServices
异常,我猜这与COM有关

额外信息
  • 我刚刚安装了ODAC 12c
  • 连接信息已验证。我可以使用使用不推荐的SilverLight应用程序连接到同一个数据库。他们很好

听起来好像是oracle客户端的问题。当控制台项目工作正常时,我在web项目中也遇到过类似的问题。
如果您安装了64位ODAC,请完全卸载它并尝试使用32位ODAC。另外,请再次检查Visual Studio中的目标平台是否为“32位”。如果这样做有效,您可以搜索64位安装的错误所在。

这非常值得一试。。。尽管听起来很疯狂,但尝试一下32位的所有功能,您可能会发现所有功能都非常完美。32位客户端与64位服务器的连接没有问题(反之亦然),因此除了被迫运行32位应用程序之外,应该没有任何负面影响。这也让我很高兴我为DevArt dotConnect付费。删除12c版本和安装11.2 32位版本解决了问题。因此,安装在机器中的Oracle客户端基本上是不兼容的。我真的很喜欢ODAC不给异常提供上下文的方式。