• 错误:找不到请求的 .Net Framework Data Provider。可能没有安装.


    一.错误描述

    今天在帮同事Debug的时候遇到这个问题,错误信息提示到是Data Provider的问题,首先我们看下环境.

    数据库版本:Oracle 11.2.0.4.0 64位 

    数据库服务器:linux

    应用服务器:32位windows

    IIS:IIS7

    .NetFramework:4.0

    猜测到是没有安装.Net Framework的版本对应的Data Provider,查看web.config下面的节点:

    <system.data>
       <DbProviderFactories>
       </DbProviderFactories>
    </system.data>

    并没有发现这里配置了DataProvider.

    我们去对应版本的.NetFramework安装目录下的machine.config下去找这个结点

    我的安装目录是:

    也没有发现DataProvider配置.

    到目前为止,我们就可以确定,是config里面少了配置项,现在我们来为.NetFramework添加Oracle提供的相应版本的Data Provider.

    二.查看是否有相应的Data Provider

    首先,确定我们系统上已有的Data Provider,因为我用的数据库是Oracle,所以我的Data Provider是Oracle提供的,Oracle的安装目录里可以查看到,我的是:

    其中目录中的odp.net就是 Oracle Data Provider for .Net的缩写.

    2.x是.NetFramwork 2.0版本的Data Provider(直到.NetFramework4以下,.NetFramwork3.0和.NetFramwork3.5只是加了不同的组件,但内核都是2.0)

    4是.NetFramwork 2.0版本的Data Provider

    它们是通过Oracle.DataAccess.dll来提供服务的.我们可以通过在vs.net命名行窗口下用gacutil.exe /l Oracle.DataAccess命令来查看安装的odp.net版本.

    显示我已经安装了两个版本的Oracle Data Provider.

    也可以通过在C:Windowsassembly目录下查看Oracle.DataAccess.dll的程序集版本,处理器平台等特性.但有一个问题,我的本机查不到4.0版本的Oracle.DataAccess.dll安装信息.

    但生产环境能查到,如下所示:

    程序集的版本是10.2.0.100.

    三.Oracle Data Provider的安装

    如果没有对应的ODP.Net,需要自行安装,怎么知道你需要哪个类型哪个版本的ODP.Net呢?

    这里有两个原则

    1..Net应用程序与ODP.Net处理器类型保持一致,如:IIS的应用程序池是64位,那么ODP.Net的版本也要是64位的;

    2..Net应用的.NetFramework版本与ODP.Net的版本也要保持一致.

    下载地址(总揽):http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html

    64位ODP.Net下载地址:http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html

    32位ODP.Net下载地址:http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

    注意下载的时候,跟你的数据库版本保持一致.

    以安64位ODP.Net为例:

    1、下载完成后,将其解压到某个目录,比如D:oracle11gODP.Net,cmd下键入命令:
    D:oracle11gODP.Netx64>install.bat all c:odp.net myhome (install all components)
    上述命令将自动把所有文件复制到c:odp.net下
    2、然后转到c:odp.net下,键入命令:
    c:odp.net>configure.bat all myhome (configure all component)
    将自动向GAC中部署相应的程序集.
     

    四.Oracle Data Provider的配置

    安装了过后,你可以在对应的.NetFramework版本下查看machine.config里面的<system.data><DbProviderFactories>节点,如果没有,你可以在这个节点下添加.
    <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>

    版本信息什么的,要与你前面安装的保持一致.

    也可以在你的应用程序下的webconfig下面的<system.data><DbProviderFactories>节点添加上述信息.推荐在machine中添加,这样使用相应版本的.NetFramework下的应用程序就不用单独再一一配置了.
     

    五.使用Oracle Data Provider提供的程序集

    现在可以打开你的VS,添加Oracle Data Provider(ODP.Net)提供的程序集Oracle.DataAccess.dll了.
    现在,可以使用这个Oracle提供的DLL来访问Oracle数据库了.前面的问题也迎刃而解.其他不同类型的数据库也可以按照这个思路来解决.
     
     
     
    原文地址:http://www.cnblogs.com/gudi/p/6110875.html
  • 相关阅读:
    代码转换为html显示
    subprocess实时获取结果和捕获错误
    centos7开放端口和防火墙设置
    Inside The C++ Object Model(一)
    知其所以然(以算法学习为例)
    sql语法
    DLL断点调试
    我的算法学习之路
    算法系列之一
    cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
  • 原文地址:https://www.cnblogs.com/hzz521/p/6383011.html
Copyright © 2020-2023  润新知