最近我们团队的开发机从
32位xp升级到64位win7, 期间小研究了一下, 现做个总结, 希望对大家有帮助
背景描述:
DEV Env. |
Original |
New |
OS |
Windows XP (x86) |
Windows 7(x64) |
Dev. Tool |
VS2008 (x86) |
VS2008 (x86) |
Oracle Client |
Oracle 10g (x86) |
Oracle 10g (x86) |
SQL Tools |
Toad for oracle 6.1.2 (x86) |
Toad for oracle 6.1.2 (x86) |
装好64bit Win7后,安装VS2008正常,安装Oracle 10g正常,但是run我们的程式,却连不上DB.详情看错误检索部分.
在64位下开发要注意以下:
1. VS2008没有64位,所以要“以管理员身份运行”
2. Toad是32位,会被默认安装到Program Files (x86),我们用的这个版本的Toad是没有办法识别带有括号的路径的(不确定新版本的Toad有没有修复这个问题,但是最好还是放到别的地方去).
3. 如果安装的是32位的Oracle Client,那么Winform程式一定要用x86来编译,貌似是因为编译的platform决定了会调用哪一种oci.dll
错误检索:
1. Could not create an environment: OCIEnvCreate returned -1(OCIEnvCreate失败,返回代码为-1,但错误消息文本不可用)
解决方法:管理员身份运行VS2008,若不行,再尝试删除C:\app\***\product\11.2.0\下面无效的client文件夹(若提示错误则重启后删除)
2. 尝试加载Oracle客户端库时引发BadImageFormatException。如果在安装32位Oracle客户端组件的情况下以64位模式运行,将出现此问题。
解决方法:安装Oracle提供的ODTwithODAC (32-bit Oracle Data Access Components (ODAC)
with Oracle Developer Tools for Visual Studio)
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
关于ODTwithODAC:
官网中提到:
Each 32-bit ODAC client download below supports connectivity to Oracle Database versions 9.2, 10.1, 10.2, and 11.1, and 11.2.
ODAC是oracle提供用于Windows Oracle数据访问组件的组件,由Oracle客户端驱动程序组成,包括ODP.NET、ODBC、OLE DB、OO4O以及Oracle Services for MTS.
我们开发环境安装的是32-bit的ODAC,但是程式中的oracle连接类的是以AnyCPU在跑的,换句话说,在64位CPU下运行的ADO.NET通过32位ODAC访问数据库组件的时候,必须要安装Oracle提供的ODTwithODAC.并且只是给asp.net,如果是winform程式,只要用x86平台编译就可以了.
为什么不直接装一个64-bit的Oracle Client?
因为我们的程式无法以x64来编译, (需要改到太多东西,并且有风险).而且现存的Toad也不能识别x64的
oralce client.