Ошибка «Не удается найти запрошенный поставщик данных .Net Framework. Возможно, он не установлен» - PullRequest
3 голосов
/ 27 сентября 2011

Я использую Visual Studio 2008 и базу данных Oracle 10g.

Я пытаюсь подключиться к бэкэнду так:

Подокно "Обозреватель серверов". Нажмите кнопку «Подключиться к базе данных» и сделайте следующую цепочку Подключение данных-> Выберите источник данных-> База данных Oracle-> поставщик данных Oracle для .Net-> Продолжить-> Имя источника данных: oraclexe-> Имя пользователя: 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" />

Но тогда к той же самой ошибке сохраняется. Что делать?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Поставщики данных Oracle специфичны для архитектуры. Если вы загружаете 64-битный драйвер, вам нужно создать приложение как 64-битное (или AnyCPU, если целевая ОС является 64-битной).

Проблема в том, что Visual Studio 32-разрядная, поэтому вам также нужно установить 32-разрядный драйвер.

0 голосов
/ 25 января 2012

Несколько предложений:

  1. Не используйте бета-версию EF.Если вы делаете, используйте 32-разрядную версию.Драйвер не работает так, как было объявлено по состоянию на октябрь 2010 года, установка была неверно настроена для 64-разрядных приложений, а odac dll были помещены в неправильную системную папку, помимо других проблем.
  2. Придерживайтесь ado.net и выполните некоторые действия.простые запросы перед выполнением проекта, если вы используете чужой проект или скачали его откуда-то.
  3. В файлах проекта Visual Studio сохраняются рекомендуемые места для сборок в файле проекта, ищите их и удаляйте путь «подсказки»если это чужой проект.
  4. Загрузите и установите файлы клиента: http://www.oracle.com/technology/software/tech/windows/odpnet/index.html, поскольку вы не указали, что у вас установлены файлы клиента.

В заключениевы, вероятно, используете одну версию драйвера для инструмента проектирования, а другую - для базовых соединений.Я знаю, это звучит странно, но я сталкивался с этим уже несколько раз.Единственный путь вперед - разобрать его на части.Если вы начнете с базового теста ADO.NET, вы обнаружите проблему.

Ниже приведено простое подключение для начала работы.

Спасибо,

Aldo

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();
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...