Asp.net using Oracle.DataAccess.dll access oracle 11g 64bit & x86

时间:2021-08-09 16:44:23

使用.net访问oracle数据库时一般需要在机器上安装instantclient才能正常连接。

下面介绍一种不用安装instantclient直接引用dll就用.net能连接oracle数据库的方法:

1. 下载x86的ODAC1120320Xcopy_32bit包

使用x86的包是因为vs建立的asp.net项目默认指定的是x86的类库,而且无论你将项目的target设置为64,或者x86使用的都是x86的类库,Asp.net using Oracle.DataAccess.dll access oracle 11g 64bit & x86

如果你引用的Oracle.DataAccess.dll是64bit的话在运行的时候会报错。

Asp.net using Oracle.DataAccess.dll access oracle 11g 64bit & x86

2. 将一下5个文件从压缩包中拷贝出来。

Asp.net using Oracle.DataAccess.dll access oracle 11g 64bit & x86

其中Oracle.DataAccess.dll使用类库引用方式,其余四个类库是C++类库,要使用添加链接的方式,并设置为拷贝到输出目录。

3. 在VS中调试网站。OK,可以正常访问数据库。

4. 将网站部署到64bit的OS的IIS7中是发现,又出现BadImageFormatException。

问题在于asp.net在vs中调试时使用的是x86的类库,但是iis中却使用的是65bit的类库,导致了Oracle.DataAccess.dll无法加载。

要解决此问题只需要将网站的线程池设置为使用32位应用程序即可。

Asp.net using Oracle.DataAccess.dll access oracle 11g 64bit & x86

注意在Asp.net应用中将Target设置为Any Cpu可以正常运行,

但是在windows或者console程序中Target必须设置为x86或者64才能正常运行。