C# oracle odp.net 32位/64位版本的问题

问题如下:

  系统是win7 64位,技术 asp.net mvc 4, 数据库 oracle 11g.

 由于某些原因只能使用 32的 ODP.NET ( Oracle Data Provider ),之前安装 32位的 oracle 11g client (文件名win32_11gR2_client.exe)  然后设置

  iis ,将应用程序池的高级选项中的 "启用32位应用程序" 设置为true,如图 

即可.

 


 

后来磁盘有点满,误删除了一些东西,网站就打不开了. 重新安装也不行,试了安装Oracle Developer Tools for Visual Studio 2013 ( http://www.oracle.com/technetwork/topics/dotnet/downloads/odacmsidownloadvs2013-2756823.html) 也不行.

又试了oracle 11 xe 还不行.郁闷...


 

 决定卸载重装, 用自带的卸载脚本中途出错,实际上基本一点也没卸载.

 考虑手动卸载,

方法如下: 

 1,停用 以oracle开头的服务 

2, 删除注册表 打开 regedit,路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\   删除该路径下的所有以oracle开始的服务名称

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\,删除该oracle目录

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\, 删除该目录

3,删除环境变量,删除path环境变量中关于Oracle的值

4,删除Oracle安装所在路径

5, 重启

--------------开始安装-------------------

重新安装win32_11gR2_client 后,发现还是不行,泪奔 ~~o(>_<)o ~~


 

只能用原始的办法----- 根据错误提示,一步一步解决 .

过程中遇到的错误,大致是Oracle.DataAccess.dll 版本不匹配, 

解决办法 用everthing 早所有的 Oracle.DataAccess.dll文件,全部替换成ODP.NET\bin\2.x目录下的 Oracle.DataAccess.dll,并执行

gacutil  /i D:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

发现还是不行~~o(>_<)o ~~ .

根据错误提示,找到项目下的Web.config,C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config ,C:\Windows\assembly\GAC_32\Policy.2.112.Oracle.DataAccess\2.112.3.0__89b483f429c47342\Policy.2.112.Oracle.DataAccess.config.

首先确定Web.config是没问题的,然后找machine.config 的问题,根据错误中的 publicKeyToken="89B483F429C47342" 也没发现多大问题,其实是不知道怎么改这个文件 (>﹏<) .好吧来看Policy.2.112.Oracle.DataAccess.config这个文件,

原文件是这样的

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
            <bindingRedirect oldVersion="2.112.0.0-2.112.3.0" newVersion="2.112.3.0"/>
        </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

ODP.NET\bin\2.x目录下的 Oracle.DataAccess.dll 版本是 2.112.1.0, 问题找到了

将文件改成这样

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
            <bindingRedirect oldVersion="2.100.1.0-2.110.1.0" newVersion="2.112.1.0"/>
        </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

运行网站, 大功告成!!  

O(∩_∩)O哈哈~ 我好厉害,也是没谁了~~ 

 


 

又根据

publicKeyToken="89B483F429C47342" 搜索了下,好像修改web.config也是可以的(具体没验证),
<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
<dependentAssembly> 
<assemblyIdentity name="Oracle.DataAccess" 
publicKeyToken= "89B483F429C47342" 
culture= "neutral" /> 
<bindingRedirect 
oldVersion= "2.100.1.0" 
newVersion= "2.112.1.0"/> 
</dependentAssembly> 
</assemblyBinding> 
</runtime>

参考 http://blog.csdn.net/linghao00/article/details/8058730 (没有验证)

什么用 odp.net 而不用微软自带的 Microsoft's .NET Framework Data Provider for Oracle ?下图说的清楚

 




另外附加一个小技巧:
直接用资源管理器(explorer)是无法访问C:\Windows\assembly下的子目录的,
但是用vs就可以,可以选择文件->打开->文件就可以查看了, 如图




其它参考  http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html

 

  

 

转载于:https://www.cnblogs.com/xrcdev/p/5957442.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值