目前,Windows操作系统可以分成两类,32位和64位(64位也区分x86_64位和Itanium ),同时Oracle客户端也做了同样的区分。

在安装和开发的过程中,经常会遇到一些问题,本文就总结了相关的解决方案

Oracle Instant Client  点击下载

1 解决方案(这是最终步骤,其他供参考)

  1. 安装Oracle64位客户端(win64_11gR2_client)下载页面 下载地址
  2. 将NetWork Service用户加入Administraotr组中,重启计算机(重要)
  3. 新建asp.net网站,配置程序的调试模式为使用IIS,不要使用WebServer,这样就可以调试了
  4. 由于Webserver是32位的程序,因此如果要使用webserver进行调试,可以考虑安装32位的Oracle客户端(没有进行测试)。

2 安装顺序

安装Oracle 11g Release 2 ODAC 11.2.0.1.2 with Oracle Developer Tools for Visual Studio,配置服务器tnsnames,使用SQLPLUS测试成功连接。

启动IIS,发布.NET连接ORACLE的应用,测试,报"System.Data.OracleClient 需要Oracle 客户端软件8.1.7 或更高版本"错误。解决:将ORACLE安装目录为Network Service用户赋读和执行权,并传递到所有子目录。

重启动IIS,报“尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。 ”解决:下载并解压instantclient_11_2的X64版本,放到ORACLE安装目录下,并在PATH路径中搜索在前。

重启动IIS,报“ORA-12154: TNS:could not resolve the connect identifier specified”错误。解决:指定环境变量TNS_ADMIN到tnsnames.ora所在目录。

重启动IIS,.NET应用连接数据库服务器成功。

3 在asp.net中,不用使用Webdev进行调试,必须使用IIS调试

我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但是我们的服务器一般都是64位的,所以有时也需要在64位的环境下装一个VS调试程序。最近遇到的一个问题就是一个同事换了一个电脑,用的是X64的Windows 2008作为操作系统,要进行Oracle的数据库连接,所以也装了64位的Oracle客户端。如果是控制应用项目或者WinForm项目可以正常连接Oracle,但是Web项目在程序中打开Oracle连接时,系统抛出了异常:

尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。

显然,这个提示的不正确,因为我们装的就是64位的客户端,所以并不存在64位程序调用32位客户端的情况。难道是生成的程序是32位的,然后32位调用了64位的客户端,于是我把程序属性中的生成平台改为X64,如图所示:

结果这样生成的WebService程序在调用时还是报同样的异常。这个问题困扰了我一天,其中想到的解决办法就是把64位的客户端卸载了,在X64的操作系统中安装32位的客户端,然后这样就可以了,但是如果不是Web应用(比如控制台应用程序或者WinForm程序)却同样报错,那就需要将非Web应用的项目按照上图的设置方法,将生成的平台改为X86才能正常运行。

解决办法:

这当然是一个折中的办法,今天终于发现了真正的原因,原来VS在建Web项目时,平时运行使用的是自带的WebDev.WebServier是一个32位的服务,所以在其中运行的Web项目不管怎么设置平台,都只能作为32位的应用来看待,所以在Web项目运行时连接64位的Oracle客户端会报错,而非Web项目就不会。

网上搜了一下,好像WeDev服务好像没有64位的,所以要解决这个问题,那么就不要使用这个服务作为Web服务,而使用IIS,因为IIS使用的是w3wp,在64位的操作系统中是64位的,所以可以正常使用64位的Oracle客户端。具体设置如下:

这样设置后,每次运行就好以IIS来运行,不管是Web项目还是控制台应用项目或者WinForm项目,都会正常连接Oracle了。

4 使用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的开发总结。

5 System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

在用VSTS2005/2008+Oracle9做环境连接Oracle时候,在VS 开发服务器运行正常,但IIS服务器调试和部署会报错!

      IIS服务器报错:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。

出错的原因:

  1. 虽然报的是需要安装客户端8.1.7及以上版本,实际是.net账户没有访问Oracle\bin文件夹的权限
  2. 在 Windows Server 2003/2008 的 NTFS系统中提供了高级的访问安全性,FAT32系统也许没有这个问题。

解决办法如下:

我用Windows Server 2008 为例 Windows Server 2003 是一样的

  1. 打开安装有Oracle客户端的电脑,在安装目录 C:\oracle\ora90\BIN 文件夹上右键-》安全选项卡-》点击  编辑---》添加。
  2. 点击“查找范围”,在下面显示的账户中选择“NTWORK SERVICE”  ----将“读取和执行”的权限都赋给他(如果不行就把完全控制给他,这样不安全),子文件夹继承此权限,确定。
  3. 打开“服务器管理器”-》配置-》 本地用户和组-》组-》adminisgrators-》将Network Service 添加进来
  4. 重新启动IIS,在“运行”中输入“IISRESET”。

原文地址:http://blog.csdn.net/zouyujie1127/article/details/6371165

【转】Windows环境下.NET 操作Oracle问题的更多相关文章

  1. Windows环境下,本地Oracle创建dblink连接远程mysql

    前言 我的情况是,本地安装了oracle(安装完成后带有SQL Developer,不需要再安装instantclient),创建dblink去连接远程的mysql.有些朋友可能是 本地使用PL\SQ ...

  2. Windows环境下google protobuf入门

    我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010.简单介绍下google protobuf: google protobuf 主要用于通讯,是google ...

  3. Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像(克隆和导入)

    Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像: 注:直接复制一个.vdi 虚拟硬盘再挂上去就可以,但Virtualbox居然提示UUID重复,无法使用. 则,可以通过 ...

  4. Windows环境下Oracle数据库的自动备份脚本

    批处理文件(.bat) @echo off echo ================================================ echo  Windows环境下Oracle数据 ...

  5. windows环境下protobuf的java操作{编译,序列化,反序列化}

    google protocol buffer的使用和原理 概况: Protocol Buffers(也就是protobuf)是谷歌的语言中立的.平台中立的.可扩展的用于序列化结构化的数据: windo ...

  6. Windows环境下修改Oracle实例监听IP地址

    Windows环境下修改Oracle实例监听IP地址. 配置文件路径:<ORACLE_HOME>\NETWORK\ADMIN 如:C:\Oracle11gR2\product\11.2.0 ...

  7. Windows环境下Oracle数据库的自动备份脚本自动删除30天前的备份

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  8. windows环境下安装pymysql(操作带图)

    在windows环境下安装pymysql,首先要找到python的安装位置,如果在c盘,启动cmd的时候,要获取管理员权限. 具体步骤,一,管理员模式启动cmd.在箭头指定位置,搜索cmd,出现快捷方 ...

  9. Windows环境下启动Redis报错:Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。(已解决)

    问题描述: 今天在windows环境下启动Redis时启动失败报错: 解决方案: ①运行命令:redis-cli.exe ②退出Redis ③运行命令:redis-server.exe redis.w ...

随机推荐

  1. Party

    hdu3062:http://acm.hdu.edu.cn/showproblem.php?pid=3062 题意:中文题. 题解:很明显的2-sat.然后要深刻理解命题和逆否命题.如这一题,c1,c ...

  2. [性能分析]linux文件描述符(转)

    1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.l ...

  3. SQL*Net more data from client

    SQL*Net more data from client The server is waiting on the client to send more data to its client sh ...

  4. HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))

    ArcSoft's Office Rearrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. 关于在C#中数组(byte[])复制方式

    {            int[] src = new[] { 1, 2, 3, 4, 5, 6 };            const int destLen = 4;//目标数组大小       ...

  6. Linq to SQL 类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。

    在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): ---> ...

  7. Myriad2 简介

    本文翻译自英文: Myriad2图像处理器是一个永远在线的移动视觉处理器系统.它提供了非常强处理能力和及其高效了内存带宽以满足计算机视觉和计算成像应用的需求. Myriad2同时也满足移动设备的非常低 ...

  8. 一些收费的vpn或ssh代理

    www.expressvpn.com TorGuard:    https://help.ubuntu.com/community/Tor?action=show&redirect=TOR h ...

  9. JavaEE学习笔记---数据库操作篇

    测试JDBC和SQLServer的插入操作,源码如下: import java.sql.Connection;import java.sql.DriverManager;import java.sql ...

  10. linux —— 学习笔记(文件、文件夹操作)

    目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir  创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp       复制文件或文件 ...