web-dev-qa-db-de.com

Der angeforderte .NET-Datenanbieter konnte nicht gefunden werden. Es darf nicht installiert werden

Hallo, es ist mein erstes Mal, dass ich ein Projekt mit Entity Framework auf einem Remote-Server veröffentlicht habe. Die Seiten funktionieren einwandfrei, aber wenn ich versuche, in meinem reservierten Bereich zuzugreifen und eine Dabatase zu lesen, erhalte ich diesen Fehler

Der angeforderte .NET-Datenanbieter konnte nicht gefunden werden. Es darf nicht installiert werden.

Beschreibung : Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Überprüfen Sie die Stack-Ablaufverfolgung auf weitere Informationen zu dem Fehler und wo er im Code entstanden ist. 

Ausnahmedetails : System.ArgumentException: Der angeforderte .Net Framework-Datenanbieter kann nicht gefunden werden. Es darf nicht installiert werden.

Quellfehler: 

Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zum Ursprung und zum Ort der Ausnahme können mithilfe der Ablaufverfolgung für Ausnahmestapel identifiziert werden.

Stapelverfolgung: 

[ArgumentException: Die angeforderten .Net Framework-Daten können nicht gefunden werden Anbieter. Es darf nicht installiert werden.]
System.Data.Common.DbProviderFactories.GetFactory (String ProviderInvariantName) +1402071
System.Data.EntityClient.EntityConnection.GetFactory (String ProviderString) +35

[ArgumentException: Der angegebene Informationsanbieter kann nicht in .__ gefunden werden. die Konfiguration oder ist ungültig.]
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 () in D:\vertrauenfirma\shield_trust\shield_trust\POCO.Context.cs: 23
shield_trust.user_login.check_login () in D:\vertrauenfirma\shield_trust\shield_trust\user_login.aspx.cs: 65
shield_trust.user_login.entraButton_Click (Objektsender, EventArgs e) in D:\vertrauenfirma\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

Muss ich einige dll in meinen bin-Ordner kopieren oder meine web.config ändern?

13
P_R

Versuchen Sie, dies auszuführen, um eine Liste der installierten Anbieter zu erhalten. Überprüfen Sie, ob Ihr Provider vorhanden ist:

// 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;
}

UPDATE: Sie müssen den MySQL-Provider auf dem Zielcomputer installiert haben. Er heißt so etwas wie "MySQL Connector Net x.x.x". Diesen erhalten Sie von dieser Website

14
Paul Zahra

Bei unseren Anwendungen (ASP.NET, Test, Windows Service) mussten wir die Dateien app.config oder web.config (innerhalb des Knotens configuration) unten hinzufügen, damit dies funktioniert:

<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>
9
udog

Bei uns waren es 32 vs. 64-Bit-Prozess ..__ Der Server ist 64-Bit . Das installierte ODP.NET (Oracle Client) ist auch 64-Bit ..__ "und" bevorzugen 32-Bit "-Flag SET:

http://grab.by/v5ki

wurde als 32-Bit-Prozess ausgeführt . Sobald das Kontrollkästchen deaktiviert wurde, wurde alles erneut gestartet.

4
Greg Z.

Wenn Sie einen Dialog wie folgt erhalten ...

"Kann den angeforderten .NET Framework-Datenprovider nicht finden. Möglicherweise wird er nicht installiert."

Suchen Sie in den Dateien machine.config an den folgenden Speicherorten…

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

Leeren leeren 

"DbProviderFactories" nodes.
3
Thomas

Peinlicherweise habe ich drei Tage versucht, diesen Fehler zu beheben. Ich hatte auf meinem "connectionString" eine falsche Eigenschaft "providerName"

Gewechselt von:

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

zu:

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

Ich hatte System.Data.MySqlClient anstelle von Mysql.Data.MySqlClient angegeben.

d'oh!

2
birwin

Beim Herstellen einer Verbindung zu einer Datenbank wird ein sogenannter "Datenprovider" zur Abstraktion von Implementierungen verwendet.

Ihre Ausnahme scheint zu sagen, dass der angegebene Datenprovider nicht auf dem Zielcomputer vorhanden ist. Welche Datenbank verwenden Sie in Ihrer bereitgestellten Umgebung? Überprüfen Sie Ihren web.config-Verbindungsstring auf Einzelheiten. 

Möglicherweise müssen Sie den angegebenen Datenprovider (einmalig) selbst auf diesem Computer installieren, damit er im Global Assembly Cache (GAC) verfügbar ist.

1

Die in Web.config hinzugefügte Anweisung hat mir geholfen.

<system.data>
        <DbProviderFactories>
            <clear />
            <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>
0

Um die Antwort von udog weiter auszubauen, wenn Sie mehrere Anwendungen auf diesem Server mit diesem Datenprovider verwenden möchten, ist es wahrscheinlich sinnvoller, sie der Datei machine.config hinzuzufügen.

Wie Thomas feststellt, befinden sich die Dateien machine.config hier:

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

Der Eintrag machine.config ist wie der Eintrag 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>

Hinweis: Wenn sich Ihre Anwendung auf mehreren Servern befindet (z. B. QA/Testserver und Produktionsserver) und Sie diesen Fehler nur auf einem dieser Server erhalten, empfehle ich Ihnen, eine Datei dif zwischen den Dateien machine.config auszuführen, um zu sehen, ob es dort ist ist ein Unterschied zwischen den Servern.

0
Tony L.

Ich weiß, dass dies alt ist, aber wie in udog diesem Abschnitt der Fehlermeldung "Der angegebene Anbieter des Speichers kann nicht in der Konfiguration gefunden werden kann oder ist ungültig" erklärt, zeigt das Problem an. Fügen Sie also abhängig von der Backend-Datenbank die Providerinformationen zur Konfigurationsdatei hinzu. Wenn bereits hinzugefügt, stellen Sie sicher, dass es korrekt ist. Wenn Sie für Oracle den verwalteten Provider für EF und Oracle.DataAccess verwenden, sieht es ungefähr so ​​aus. Beachten Sie, dass Ihre Oracle-DLL-Version möglicherweise anders ist. 

<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>
0
BunmiO

Beim Versuch, eigenständige Tools auf meinem PC zu installieren, bin ich auf denselben Fehler gestoßen. Ich habe die folgenden Schritte ausgeführt: .NET Framework 2.0 und 3.0) .NET Framework 4.7 Erweiterte Dienste wurden erneut installiert, aber das Problem wird nicht behoben, bevor ich schließlich diese einfache Korrekturprozedur angewendet habe .. __ Laden Sie SSCERuntime_x64-ENU.exe herunter und installieren Sie es. Folgen Sie diesem Link zum Download https://www.Microsoft.com/en-us/download/details.aspx?id=30709 Viel Glück.

0
Peters