ODAC 12c第2版(12.1.0.1.2)Xcopy与Oracle 11g R2数据库的兼容性

时间:2014-08-25 06:49:51

标签: c# oracle oracle11g odp.net oracle12c

我尝试升级我的C#项目以使用最新的ODAC 12c版本,我为此下载了ODAC 12.1 xcopy for Windows。安装很好,但是当我尝试执行单元测试时,问题就出现了。

我的测试用例在connection.Open()失败。样本如下:

OracleConnection con = new OracleConnection(); 
con.ConnectionString = @"User Id = test, Password = test; Data Source = test";
con.Open();

不幸的是,没有异常消息,Stack Trace也没有多大帮助:

结果StackTrace:

at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Int32 isRecoverable)
   at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
   at Oracle.DataAccess.Client.OracleConnection.Open()
   at MyProgram.Program.GetDetails()

当我尝试调试时,在执行开始时弹出一个错误消息框,说明:动态链接库oraons.dll 中找不到过程ons_init_wconfig_ctx点的条目。

我想知道是否有遗漏的东西。

Oracle DB版本:11.2.0.3.0 Oracle客户端版本:11.2.0.3.0 ODAC版本:12.1.0.1.2

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题“使用我们的桌面应用程序在动态链接库oraons.dll中找不到过程ons_init_wconfig_ctx点。”

花了很多天后终于找到了解决方案来开展工作。步骤如下:

  1. 从PATH变量中删除不需要的oracle homes,例如我已经安装了32位和64位的ODAC 12。
  2. 我的C:\ app \ client \ mdas0004 \ product \ 12.1.0 \ client_1 \ bin中没有oraons.dll,所以我从C:\ app \ client \ mdas0004 \ product \ 12.1.0复制了dll \ client_1到bin文件夹。
  3. 宾果开始工作了。

答案 1 :(得分:0)

如果这是非托管客户端,请尝试设置dllpath:

<configuration>
 <oracle.dataaccess.client>
   <add key="DllPath" value="C:\<your_xcopy_dir>\bin"/>
 </oracle.dataaccess.client>
</configuration> 

你可能正在从以前的oracle家中获取非托管dll。通常我会期望“无法加载程序集”消息,但可能情况已经改变了12.如果确实解决了这个问题,并且您已经厌倦了处理“oracle homes”,那么请考虑使用新的Oracle.ManagedDataAccess.dll。

无论如何,我不希望这是客户端/服务器兼容性问题。