ODAC 12c Release 2(12.1.0.1.2)兼容Oracle 11g R2数据库

本文关键字:Oracle 兼容 11g R2 数据库 12c ODAC Release | 更新日期: 2023-09-27 18:19:21

我正在尝试升级我的c#项目,以使用最新的ODAC 12c版本,我为Windows下载了ODAC 12.1 xcopy。安装正常,但当我试图执行单元测试时,问题开始了。

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

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

不幸的是,没有异常消息,堆栈跟踪也没有多大帮助:

Result 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 version: 11.2.0.3.0Oracle客户端版本:11.2.0.3.0ODAC版本:12.1.0.1.2

ODAC 12c Release 2(12.1.0.1.2)兼容Oracle 11g R2数据库

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

花了许多天之后,终于找到了使工作的解决办法。步骤如下:
  1. 从PATH变量中删除不需要的oracle home,例如我安装了32位和64位的ODAC 12。
  2. 我的C:'app'client'mdas0004'product'12.1.0'client_1'bin中没有oraons.dll,所以我将dll从C:'app'client'mdas0004'product'12.1.0'client_1复制到bin文件夹。

Bingo开始工作

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

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

您可能正在从以前的oracle home中拾取未管理的dll。通常情况下,我期望一个"加载程序集失败"的消息,但也许事情已经改变了12。如果这确实解决了它,并且你厌倦了处理"oracle homes",那么考虑新的oracle . manageddataaccess .dll代替。

在任何情况下,我不希望这是一个客户端/服务器兼容性问题。