zoukankan      html  css  js  c++  java
  • 尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录

    电脑是win8 64位,安装oracle 11g r2 64位的,谁知道一切装完毕后,打开项目却连不上oracle数据了...
    首先是pl/sql连不上,装了oracle服务器,应该是不用再装客户端,pl/sql应该就能连上的,应为oracle服务器版本自带了客户端的那些管理工具和功能。但是pl/sql一直报个错啊!大概意思是说找不到32位的oci.dll文件之类的错误,网上一搜,说pl/sql装在64位系统上,要连64位的数据库,还得装个32位的客户端。而我又不想再去装个客户端了,感觉太大了,再说装了oracle数据库,应该是不用再装客户端了的。无奈只好下了个IntantClient(轻量级客户端包)。下面说说这个IntantClient(轻量级客户端包)与传统的Oracle Client 的区别:

    instanct client 分为几个包,其中basic基本只有oci库文件
     其它常见的包还有sqlplus,jdbc等,都运行于basic包之上。
     而
     Oracle Client不光包括instant client,还包括很多工具。

    从10G开始,Oracle提供了一个较为轻量级的客户包,叫做Instant Client. 将它安装好后,就不用再安装庞大的Oracle Client了.
    这样一来,只要客户端下载Instant Client,直接解压,设置Path就ok了。
    具体设置如下:
    1、下载32位Oracle InstantClient
     2、将Oracle InstantClient解压到某目录
     3、打开PL/SQL,在perference里面设置OCI Library和Oracle_home,例子如下:
             OCI Library=D:instantclient_11_2oci.dll   (刚刚InstantClient的解压目录的OCI.DLL文件)
             Oracle_home=D:instantclient_11_2     (刚刚InstantClient的解压目录)
     4、设置环境变量(修改NLS_LANG和TNS_ADMIN环境变量)
      对于NLS_LANG环境变量, 最好设置成和数据库端一致, 首先从数据库端查询字符集信息:
      SQL> select userenv('language') nls_lang from dual;
      NLS_LANG
      ----------------------------------------------------
      AMERICAN_AMERICA.ZHS16GBK
     
     右击"我的电脑" - "属性" - "高级" - "环境变量" - "系统环境变量":
      1>.点击"新建", 变量名设置为"TNS_ADMIN", 变量值设置为"D:appAdministratorproduct11.2.0dbhome_1NETWORKADMIN", 点击"确定";   (64位ORACLE的TNSNAME.ORA文件的目录)
      2>.点击"新建", 变量名设置为"NLS_LANG", 变量值设置为"AMERICAN_AMERICA.ZHS16GBK", 点击"确定";   (数据库字段集)
      最后点击"确定"退出.
     
    至此,重新登陆PLSQL就可以用了

    好。pl/sql 是可以登录了,但是咱asp.net程序还是连不上啊!到connection.open()的时候,就报:“尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。“。这个大概是说我asp.net 程序不应该是用32的客户端去访问64位的数据库,我是这样理解的。但是我装了64的oracle 不就相当宇装了64位的客户端吗?装的那个轻量级的32位客户端只是方便pl/sql来访问oralce数据库的。这个问题网上给出了很多回答。大多是,改项目的属性里的生成选项里的目标平台:改为x86.意识是把项目当成32位运行。每个项目都照着改了,还是不管用。网上还有说,把网站项目属性里的web项里的服务器改成iis不使用vs自带的web deleloper ment 服务,应为它的进程为webDe.webServer.exe 是一个32位的进程,反正说了很多。这个方法还是可以。你改完后,项目确实可以运行,并访问oracle64位数据库了。但是我个人总觉得这种方法很麻烦。最后直接用IIS配置运行了,因为vs运行的是32位最好装个32位客户端应该就没问题了。

  • 相关阅读:
    如何通过js在子页面调用父页面元素的click事件
    时间戳转换成时间格式
    sql 生成某个范围内的随机数
    Ioc思想
    【Sharepoint控件】MOSS模式化窗口
    【Sharepoint代码段】MOSS模拟超级管理员的方法
    【Sharepoint对象模型】MOSS根据模板添加子网站
    【Sharepoint控件】MOSS列表添加时SPUser字段赋值
    【C#代码段】asp在数据库加入数据
    【C#代码段】ajax从asp后台获取数据
  • 原文地址:https://www.cnblogs.com/angelasp/p/3796521.html
Copyright © 2011-2022 走看看