打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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);

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
请教问题:如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行
Oracle免客户端For .Net
在linux操作系统下使用Oracle10.1g廋客户端
C#远程连接Oracle数据库(不安装客户端)
【Python】Python3.7.3
Win7使用Toad抛出Can't initialize OCI. Error
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服