我正在尝试升级我的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
我在桌面应用程序中遇到了同样的问题"在动态链接库oraons.dll中找不到过程ons_init_wconfig_ctx点的入口"。
花了许多天之后,终于找到了使工作的解决办法。步骤如下:- 从PATH变量中删除不需要的oracle home,例如我安装了32位和64位的ODAC 12。
- 我的C:appclientmdas0004product12.1.0client_1bin中没有oraons.dll,所以我将dll从C:appclientmdas0004product12.1.0client_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代替。
在任何情况下,我不希望这是一个客户端/服务器兼容性问题。