开发环境:
OS:⑥4位Win7
开发工具:VS2010
数据库:Oracle11gR1(⑥4位服澲务器端,32位客户端)
VS2010报错信息:数据连接不成功,请检澲查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以⑥4位模式运行,将出现此问题。
参考了这篇文章,但是没解决问题,不知道什么原因。不过也做个收zàng,兴许以后能用上。
研究了一下午,没搞定,最后sǐ马当活马医,竟然试成功了,当时的感觉真是“山穷水尽疑无路,柳暗huā明又一村”。解决方fǎ很简单:继续用原来安装好的32位的InstantClient,环境变量的Path中,在最前面添加“C:\Oracle\product\instantclient_11_2;”(这是我本机32位InstantClient的目录),确定之后,重启,搞定。注意,环境变量一定要放在最前面,至少是oracle相关的path中,这条要放在最前面,否则可能先检测到⑥4位的目录,程序继续报错。
学而不思则罔,本菜鸟大概分析一下原因:vs2010的调试工具WebDev.WebServer20.exe是32位的,需要执行对应的32位oracle客户端的程序,最关键的是oci.dll。而原path环境变量中的Oracle服澲务器端目录,里面是⑥4位的程序,包hán6*4位的oci.dll,此时vs调用6*4位的动态库,执行报错。我们只要让vs先检测到32位的oci.dll即可,通澲过修改环境变量path来实现。事后比较了一下,本机安装的Oracle服澲务器端和客户端,里面的两个oci.dll文件大小不一样,也验证了我的猜测。