使用VS开发基于Oracle程序的严重问题32位64位
来源:互联网 发布:js让页面重新加载 编辑:程序博客网 时间:2024/06/06 18:35
使用VS开发基于Oracle程序的严重问题
基于Oracle开发时遇到
数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,将出现此问题
The Problem in english is :
"Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed"
具体环境是:
win2008 64
vs 2010
开发调试过程中都没有问题,一部署这个问题就来了。
然后经过一大堆改动,改装64位Client之后的结果是:
IIS测试都没有问题,一调试这个问题就来了。
最奇怪的是这两个错误都是同样的错误信息。
呵呵,两种情况都 让我碰到了,那就一起解决了他
我搞了整整两天才解决,网上有是有相关资料,但是都不全。具体原因也不明了.下面我来全面的讲述一下。
追根究底:
请看下图:
VS编译器调试过程用的并不是IIS来发布 而是用上面这个进程。我们可以看到,他明显是一个32位的。而IIS 7的进程w3wp是64 bit的。这就说明,如果我们在调试,那么我们的程序就在模拟32位运行,部署之后,确是模拟64位运行,让我最不能理解的是为什么一个是模拟32位运行,一个是模拟64位运行,而给我们的异常信息确实相同的呢?先不管这么多,至少现在这里我们可以得出一个结论:
如果你写的程序调试过程没有任何问题,那么你发布到64位IIS时就一定会有问题,反之则得到相反的结果。
解决方法如下:
情况一.调试过程没有任何问题,发布时出现问题
若调试没有任何问题,那么你肯定是使用32 bit oracle client 了,而服务器的IIS是64 bit的,所以需要发布网站的话,必须安装64 bit client
实际上,System.Data.OracleClient所指向的是PATH环境变量下的oci.dll。因此,我们只要让程序能够找到64位的oci.dll就可以了。方法如下:
1. 下载instantclient-basic-win-x86-64-11.1.0.7.0.zip,并解压,如C:\instantclient-basic-win-x86-64-11.1\instantclient_11_1(这个部分也是必须的,根据实际情况的不同进行修改)。
2. 在系统的环境变量PATH中加入以上路径。
之后重启操作系统(这个是必须的,我弄了一下午没有搞好,结果重启一下马上就好了),程序会依照PATH路径寻找oci.dll,如果遇到32位的oci.dll会自动略过,找到64位的oci.dll就能连接上数据库了。
情况二.调试过程出现问题,但是在IIS上测试没有问题
若IIS测试没有任何问题,那么你肯定使用的是64 bit oracle client 了,调试出错是因为调试的WebDev进程服务器是32bit的,为了模拟真实环境,你需要进行一些设置。
如果是这样的情况,那你就改VS的调试服务器吧,改成IIS就可以了。
到这里,我们可以下结论,Oracle 给的异常信息对于第一种情况来说是正确的,对于第二种情况则是错误的,意思刚好相反!!!可能是做本地化人员的一个粗心错误。
解决完这个问题之后,我的custom oracle membership for sharepoint的测试开发也就搞定了。近期还会记录一篇文章讲述custom oracle membership for sharepoint的开发总结。
- 使用VS开发基于Oracle程序的严重问题32位64位
- 64位机器上vs使用32位控件的问题
- 64位Win7中使用64位库开发程序遇到的Undefined Reference问题
- 32位 vs 64位的区别
- “32位程序/64位程序” VS “32位机器/64位机器” 那点事
- 从32位QT开发环境拷贝vs-qt的工程到64位工程中遇到的问题
- oracle odp.net 32位/64位版本的问题
- 关于如何生成32位/64位程序的问题
- 32位TOAD 不能使用64位oracle client连接的问题
- 解决64位Oracle使用32位PLSQL Developer的乱码问题
- 解决64位Oracle使用32位PLSQL Developer的乱码问题
- 64位Win7下32位Oracle客户端的使用
- 64位Win7下32位Oracle客户端的使用
- 从32位程序开发进入64位程序开发
- 32位的VS通过odbc数据源访问64位Oracle
- 64位系统使用32位的plsql连接64位的Oracle 11g
- Asp.net_解决vs运行报在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题的bug方法
- 32位和64位C++程序使用ADO访问ORACLE注意事项和区别
- 使用TabLayout实现底部Tab布局
- 文章标题
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript
- HDFS缓存机制
- wordpress 修改ajax评论分页
- 使用VS开发基于Oracle程序的严重问题32位64位
- 学习React Router (一)
- Xcode工程 .xcodeproj转为.xcworkspace
- WPS word编辑图表数据的正确姿态
- AsyncQueryHandler 异步查询数据
- cocosPods下载第三方库使用
- Socket编程中用send发送结构体
- Java学习之多线程
- Ubuntu 常用命令