zoukankan      html  css  js  c++  java
  • ASP.NET连接Oracle — 末日前的最后折腾

    由于新系统的部分功能需要和另外一家公司做数据对接,而我们自家的系统采用的是Sql Server R2数据库,对方的数据库为Oracle 11g。就涉及到在ASP.NET程序中连接Oracle数据库。这就是末日前我的工作。

    在.NET Framework 4.0中,已经内置了对 Oracle数据库操作的支持。只需要添加引用:System.Data.OracleClient。然后和连接SqlServer一样,直接使用:OracleConnection,OracleCommand,OracleDataReader等属性即可。

    但如果你使用上面的连接方式,VS将会提示 System.Data.OracleClient 下面的相关操作已弃用。同时,MSDN上面对Oracle and ADO.NET的介绍中,也有以下说明:

    The types in System.Data.OracleClient are deprecated. The types are supported in version 4 of the .NET Framework but will be removed in a future release. Microsoft recommends that you use a third-party Oracle provider.

    老大的意思是:虽然目前在.NET Framework 4.0版本中集成了相关操作,但将来的.NET版本极有可能把它清理出去。并建议采集第三方的类库完成Oracle的连接。

    感觉这个东西就像个小姐,年轻的时候陪吃陪睡,张开腿就能挣钱,但说不定哪天人老珠黄,立马滚蛋。虽然如此,由于时间关系,(必须抓紧时间享受末日前的宁静),仍然采用了上述龌龊的连接方式。

    然后,就像经常Call Lady的同志容易患花柳,梅毒,艾滋。接下来的两个小时我也被折腾的够呛。

    首先是在连接测试的时候提示以下信息:

    System.Data.OracleClient requires Oracle client software version 8.1.7 or greater

    起初以为是 System.Data.OracleClient 过期或者Oracle版本导致的问题,男人的这种直觉直接导致我接下来的很长一段时间不得其门而入。随后,在全能神的帮助下找到了如下解决方案:

    当Oracle 9.2运行在NTFS的分区上时,对于某些非administrator组的用户,ORACLE_HOME 目录是不可见的,而在windows server 2003下asp.net应用使用的帐户是netword service,因此无法创建oracle连接,只要重设一下ORACLE_HOME目录的权限就可以了。步骤如下: 
    1、以管理员的用户登录; 
    2、找到ORACLE_HOME文件夹(本人的是D:\oracle\ora92,不要对着ORACLE文件夹修改,因为ORACLE_HOME文件夹是oracle下面的那个ora92文件夹),点右键,选属性--安全,在组或用户栏中选“Authenticated Users”,在下面权限列表中把“读取和运行”的权限去掉,再按应用;重新选上“读取和运行”权限,点击应用;选权限框下面的“高级”按钮,确认“Authenticated Users”后面的应用于是“该文件夹、子文件夹及文件”,按确定把权限的更改应用于该文件夹; 
    3、重新启动计算机,让权限设置生效; 
    4、登录后运行asp.net应用,正常取得Oracle数据库的数据。

    由于 Oracle 数据库安装在第三方的服务器上面,同时上面又运行着正式的对外系统。上述引用的第3条“重启计算机”会带来诸多不便。值得庆幸的是,经过本人测试,只需要重启IIS即可:iisreset /RESTART。

    这样折腾了一回,之前的提示信息便消失了。但又出现了让人蛋疼的新问题:

    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. 

    由于几乎肯定不能干预第三方的Oracle客户端组件的安装,就只有在本地想办法,首当其冲的便是IIS。于是,接下来我便又开始探索IIS的各项设置。天可怜见,终于让我找到上述问题的解决方法:

    IIS管理器,应用程序池,设置应用程序池默认设置,启动32为应用程序,设置为true ,确定。

    再次测试,已成功连接。此时,距第一次问题的出现已过去了接近两个钟头。猛然一阵尿意!

  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/mcmurphy/p/2826859.html
Copyright © 2011-2022 走看看