Не удалось найти запрашиваемый поставщик данных.Net Framework. Он не может быть установлен

Привет, это мой первый раз, когда я публикую проект, девелопрованный с инфраструктурой сущностей на удаленном сервере. Страницы работают нормально, но когда я пытаюсь получить доступ в своей зарезервированной области, и поэтому, читая dabatase, я получаю эту ошибку

Не удалось найти запрашиваемый поставщик данных.Net Framework. Он не может быть установлен.

Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.ArgumentException: невозможно найти запрошенный поставщик данных.Net Framework. Он не может быть установлен.

Ошибка источника:

Необработанное исключение было создано во время выполнения текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием следа стека исключений ниже.

Трассировки стека:

[ArgumentException: невозможно найти запрашиваемый поставщик данных.Net Framework. Он не может быть установлен.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1402071
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35

[ArgumentException: указанный поставщик магазина не может быть найден в конфигурации или недействителен.]
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +62
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) +263
System.Data.EntityClient.EntityConnection..ctor(String connectionString) +81
System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) +42
System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) +16
shield_trust.db_shieldtrustEntities..ctor() в D:\trust-company\shield_trust\shield_trust\POCO.Context.cs: 23
shield_trust.user_login.check_login() в D:\trust-company\shield_trust\shield_trust\user_login.aspx.cs: 65
shield_trust.user_login.entraButton_Click (отправитель объекта, EventArgs e) в D:\trust-company\shield_trust\shield_trust\user_login.aspx.cs: 25
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

Мне нужно скопировать некоторую dll в мою папку bin или изменить мой web.config?

Ответ 1

Попробуйте запустить это, чтобы получить список установленных поставщиков, и проверьте, есть ли у вас:

// This example assumes a reference to System.Data.Common.
static DataTable GetProviderFactoryClasses()
{
    // Retrieve the installed providers and factories.
    DataTable table = DbProviderFactories.GetFactoryClasses();

    // Display each row and column value.
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
    return table;
}

ОБНОВЛЕНИЕ: вам нужно, чтобы поставщик MySQL был установлен на целевой машине, он называл нечто вроде "MySQL Connector Net xxx", который вы можете получить с этого веб-сайта

Ответ 2

С нашими приложениями (ASP.NET, Test, Windows Service) нам пришлось добавить ниже в наши файлы app.config или web.config (внутри узла configuration), чтобы сделать эту работу:

<system.data>
        <DbProviderFactories>
            <remove invariant="MySql.Data.MySqlClient" />
            <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
    </system.data>

Ответ 3

Для нас это был 32 против 64-битного процесса. Сервер 64 бит. Установленный ODP.NET(Oracle Client) также является 64-битным. Наше приложение составлено с целевой платформой "Любой процессор" и "Предпочитаем 32-разрядный" флаг SET:

http://grab.by/v5ki

работал как 32-битный процесс. После перекомпиляции с флагом, который не был проверен, все начало работать.

Ответ 4

Если вы получите диалог следующим образом...

"Не удается найти запрашиваемый поставщик данных.NET Framework. Возможно, он не установлен"

Просмотрите файлы machine.config в следующих местах...

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config

Удалите все пустое

"DbProviderFactories" nodes.

Ответ 5

При подключении к базе данных для абстракции реализаций используется так называемый "поставщик данных".

Ваше исключение, похоже, говорит о том, что данный датапарайдер отсутствует на целевой машине. Какую базу данных вы используете в развернутой среде? Проверьте свою спецификацию web.config connectionstring.

Возможно, вам придется установить данный датапараудер самостоятельно на этом компьютере (один раз), чтобы он был доступен из глобального сборочного кэша (GAC).

Ответ 6

Смутно, я потратил три дня, пытаясь решить эту ошибку. У меня было неправильное свойство "providerName" на моем "connectionString"

Изменено:

<configuration>
    <connectionStrings>
        <add name="Old" connectionString="Server=servername;Database=databasename;Uid=userid;Pwd=password;" providerName="System.Data.MySqlClient" />
    </connectionStrings>
</configuration>

чтобы:

<configuration>
    <connectionStrings>
        <add name="Old" connectionString="Server=servername;Database=databasename;Uid=userid;Pwd=password;" providerName="MySql.Data.MySqlClient" />
    </connectionStrings>
</configuration>

Я указал System.Data.MySqlClient вместо Mysql.Data.MySqlClient

d'ах!

Ответ 7

Я знаю, что это устарело, но, как объяснил udog, этот раздел сообщения об ошибке "Указанный поставщик магазина не может быть найден в конфигурации или недействителен" указывает на то, что проблема. Таким образом, в зависимости от базы данных базы данных добавьте информацию о поставщике в файл конфигурации. Если уже добавлено, убедитесь, что оно правильно. Для oracle, если вы используете управляемый поставщик для EF и oracle.DataAccess, он будет выглядеть примерно так. Обратите внимание, что версия oracle dll может отличаться.

<system.data>
   <DbProviderFactories>
       <remove invariant="Oracle.MaanagedDataAccess.Client"/>
       <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>  
   <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"/>
   </DbProviderFactories>
</system.data>

Ответ 8

Чтобы построить дальнейший ответ udog, если у вас будет несколько приложений на сервере с использованием этого поставщика данных, то, вероятно, имеет смысл добавить его в файл machine.config.

Как отмечает Томас, файлы machine.config находятся здесь:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config

Запись machine.config похожа на запись web.config:

<system.data>
    <DbProviderFactories>
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

Примечание. Если у вас есть приложение на нескольких серверах (например, QA/тестовый сервер и производственный сервер), и вы получаете эту ошибку только на одном из них, я бы рекомендовал делать файл, отличный от файлов machine.config, чтобы увидеть, это разница между серверами.