调用Oracle.DataAccess.Client.OracleConnection.Open()时出现System.Runtime.InteropServices.ExternalException

时间:2014-07-10 10:22:24

标签: c# oracle odp.net odac

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

// connection information removed to protect sensitive information
string host = "******";
string sid = "*****";
string connectDescriptor = string.Format("(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST={0})(PORT=1521))(CONNECT_DATA=(SID={1})))", host, sid);
string username = "*****";
string password = "*****";

string connectionString = string.Format("Data Source={0};User ID={1};Password={2};", connectDescriptor, username, password);
OracleConnection conn = null;

try
{
    conn = new OracleConnection(connectionString);
    conn.Open();
}
catch (OracleException oraex)
{
    MessageBox.Show(oraex.ErrorCode + ": " + oraex.Message);
}
finally
{
    conn.Close();
}

致电Open()会引发错误,而我无法弄清楚这一点。 oraex.ErrorCode-2147467259oraex.Message""。尝试访问抛出异常的大多数成员会产生NullReferenceException

accessing members result in a NullReferenceException

另外,我可以看到基本例外是System.Runtime.InteropServices.ExternalException

System.Runtime.InteropServices.ExternalException

这里发生了什么?由于InteropServices异常,我猜测它与COM有关。

额外信息

  • 我刚刚安装了ODAC 12c。
  • 验证连接信息。我可以使用SilverLight应用程序连接到同一个数据库,该应用程序使用已弃用的System.Data.OracleClient。他们没事。

1 个答案:

答案 0 :(得分:1)

听起来像是oracle客户端的东西。我遇到了与Web项目类似的问题,而控制台项目工作得很好。 如果您安装了64位ODAC,则将其完全卸载并尝试使用32位。另外,在Visual Studio上仔细检查目标平台是“32位”。如果可行,您可以搜索64位安装的错误。