32位程序访问64位oracle,32位Oracle在64位Windows7下,C#调用错误解决

64位Windows 7旗舰版下安装了32位的Oracle,在C#的Form Window程序中执行数据库打开语句的时候出现报错: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.

MSDN给出的BadImageFormatException信息是:当动态链接库 (DLL) 或可执行程序的文件映像无效时引发的异常。意思是说在64位下面用了32位的OracleClient,也就是我现在的这种情况。

由于System.Data.OracleClient所指向的是PATH环境变量下的oci.dll,所以我们只要让程序能够找到64位的oci.dll就可以了。方法如下:

1. 下载instantclient-basic-win32-11.2.0.1.0.zip,并解压,如C:\instantclient_11_2

2. 在系统的环境变量PATH中加入以上路径,可以放在环境变量的最后。

3. 重启操作系统。程序会依照PATH路径寻找oci.dll,如果遇到32位的oci.dll会自动略过,找到64位的oci.dll就能连接上数据库了。

注意:32位Oracle在64位Windows 7的注册表中路径是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE,不是HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,所以在C#程序中最好不用oracle的tnsnames.ora,而是写在连接字符串里。如:

string host = "127.0.0.1";

int port = 1521;

string serviceName = cmbDataSource.Text;

string dataSource = string.Format("(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = {1}))) (CONNECT_DATA = (SERVICE_NAME = {2})))", host, port, serviceName);

string ConnectionString = string.Format("User ID={0};Password={1};Data Source={2};Unicode=True",

tbUserId.Text,

tbPassword.Text,

dataSource);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值