繁体   English   中英

错误“无法找到请求的.Net Framework数据提供程序。 它可能没有安装”

[英]Error “Unable to find the requested .Net Framework Data Provider. It may not be installed”

我正在使用Visual Studio 2008和oracle数据库10g。

我试图像这样连接到后端:

子窗口“服务器资源管理器”。 按下“连接到数据库”并进行下一个链数据连接 - >选择数据源 - > Oracle数据库 - > oracle数据提供程序.Net->继续 - >数据源名称:oraclexe-> Userneme:hr密码:hr - >测试连接(回答“测试连接成功”) - >按钮确定并:

"Unable to find the requested .Net Framework Data Provider. It May not be installed"

我已经对machine.config进行了更改

<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=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342" />

但后来同样的错误仍然存​​在。 该怎么办?

Oracle数据提供程序特定于体系结构。 如果下载64位驱动程序,则需要将应用程序构建为64位(如果目标操作系统为64位,则为AnyCPU)。

问题是Visual Studio是32位,因此您还需要安装32位驱动程序。

一些建议:

  1. 不要使用EF beta。 如果您这样做,请使用32位版本。 该驱动程序不像2010年10月那样广告,安装错误配置为64位应用程序,而odac dll被放置在错误的系统文件夹中,除了其他问题。
  2. 如果你正在使用其他人的项目或从某个地方下载它,请坚持使用ado.net并在处理项目之前做一些简单的查询。
  3. Visual Studio项目文件保留项目文件中程序集的建议位置,查找这些文件并删除“提示”路径(如果这是其他人的项目)。
  4. 下载并安装客户端文件: http//www.oracle.com/technology/software/tech/windows/odpnet/index.html,因为您没有指定安装了客户端文件。

总之,您可能使用一个版本的驱动程序用于设计工具,另一个版本用于底层连接。 我知道这听起来很奇怪,但我已经好几次了。 前进的唯一方法就是把它拆开。 如果您从ADO.NET基本连接测试开始,您将发现问题。

下面是一个简单的入门连接。

谢谢,

阿尔

using System;
using System.Data.Common;
using Oracle.DataAccess.Client;

namespace EntityFrameworkForOracle
{
    internal class Test1Connection
    {
        internal void InternalTestRead()
        {
            using (var con = Database.GetLocalConnection())
            {
                con.Open();
                var cmd = Database.GetCommand(con);

                const string sql = @"select *
                            from TESTTABLE";

                cmd.CommandText = sql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}", reader[0], reader[1]);
                }

                reader.Close();

                con.Close();
                con.Dispose();

                cmd.Dispose();
            }
        }

    }

    public static class Database
    {
        private const string ProviderName = "Oracle.DataAccess.Client";
        private const string LocalConnectionString = "User Id=system;Password=XXX;Data Source=localhost:XXXX/XXXX;enlist=true;pooling=true";

        private static readonly DbProviderFactory Factory = DbProviderFactories.GetFactory(ProviderName);

        public static DbCommand GetCommand(DbConnection con)
        {
            var cmd = Factory.CreateCommand();
            if (cmd != null)
            {
                cmd.Connection = con;

                return cmd;
            }
            return null;
        }

        public static DbCommand GetCommand(string cmdText, DbConnection con)
        {
            var cmd = GetCommand(con);
            cmd.CommandText = cmdText;

            return cmd;
        }

        public static DbConnection GetLocalConnection()
        {
            var con = Factory.CreateConnection();
            if (con != null)
            {
                con.ConnectionString = LocalConnectionString;

                return con;
            }
            return null;
        }

        public static void CloseConnection(OracleConnection connection)
        {
            connection.Close();
            connection.Dispose();
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM