16
votes

Hi it is my first time that I publish a project deveolped with entity framework in a remote server. The pages work fine but when I try to access in my reserved area and so, reading a dabatase, I obtain this error

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

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1402071
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35

[ArgumentException: The specified store provider cannot be found in the configuration, or is not valid.]
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:\trust-company\shield_trust\shield_trust\POCO.Context.cs:23
shield_trust.user_login.check_login() in D:\trust-company\shield_trust\shield_trust\user_login.aspx.cs:65
shield_trust.user_login.entraButton_Click(Object sender, EventArgs e) in 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

I have to copy some dll into my bin folder or modify my web.config?

10
Check this post, it worked for me just now! - Eduardo A. Fernández Díaz

10 Answers

14
votes

Try running this to get a list of installed providers, and check yours is there:

// 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: You need to have the MySQL Provider installed on the target machine, it's called something like "MySQL Connector Net x.x.x" Which you can get from this website

11
votes

With our applications (ASP.NET, Test, Windows Service), we've had to add the below to our app.config or web.config files (inside the configuration node) to make this work:

<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>
5
votes

If you receive a dialog as follows...

"Unable to Find the Requested .NET Framework Data Provider. It may Not be Installed"

Look in the machine.config files in the following locations…

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

Remove any empty

"DbProviderFactories" nodes.
4
votes

For us it was 32 vs. 64 bit process. The server is 64 bit. The ODP.NET (Oracle Client) installed is also 64 bit. Our application compiled with the Target platform "Any CPU" and "Prefer 32-bit" flag SET:

http://grab.by/v5ki

was running as 32 bit process. Once recompiled with the flag un-checked everything started to work.

3
votes

I know this is old but as explained by udog this section of the error message "The specified store provider cannot be found in the configuration, or is not valid" indicates what the issue is. So depending on the backend database add the provider information to the config file. If already added make sure it is correct. For oracle if using the managed provider for EF and oracle.DataAccess it will look something like this. Note your oracle dll version might be different.

<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>
3
votes

Embarrassingly, I spent three days trying to solve this error. I had an incorrect "providerName" property on my "connectionString"

Changed from:

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

to:

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

I had specified System.Data.MySqlClient instead of Mysql.Data.MySqlClient

d'oh!

1
votes

When connecting to a database a so called 'data provider' is used for the abstraction of implementations.

Your exception seems to say that the given dataprovider is not present on the target machine. Which database do you use in your deployed environment? Check your web.config connectionstring for specifics.

You might have to install the given dataprovider yourself on that machine (one time) so it is available from the Global Assembly Cache (GAC).

0
votes

To build further on udog's answer, if you are going to have multiple applications on the server using this data provider, then it probably makes more sense to add it to the machine.config file.

As Thomas notes, the machine.config files are located here:

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

The machine.config entry is like the web.config entry:

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

Note: If you have your application on multiple servers (e.g. QA/test server and a production server) and you are only getting this error on one of them, I would recommend doing a file dif between the machine.config files to see if there is a difference between the servers.

0
votes

I ran into same error while I was trying to install a stand alone tools on my personal PC. I did the following steps.NET framework 2.0 and 3.0).NET Framework 4.7 Advanced services was re installed but doesn't fix the problem, before I finally used this simple fix procedure. Download and install SSCERuntime_x64-ENU.exe Follow this link to download https://www.microsoft.com/en-us/download/details.aspx?id=30709 Good luck.

0
votes

The statement added to in Web.config helped me.

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