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

时间:2014-01-16 08:48:16

标签: c# asp.net .net entity-framework

嗨,这是我第一次在远程服务器上发布一个带有实体框架的项目。页面工作正常,但当我尝试访问我的保留区域,所以,阅读dabatase,我得到此错误

  

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

说明:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:无法找到请求的.Net Framework数据提供程序。它可能没有安装。

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

  

堆栈追踪:

     

[ArgumentException:无法找到请求的.Net Framework数据   供应商。它可能没有安装。]
  System.Data.Common.DbProviderFactories.GetFactory(字符串   providerInvariantName)+1402071
  System.Data.EntityClient.EntityConnection.GetFactory(字符串   providerString)+35

     

[ArgumentException:找不到指定的商店提供商   配置,或无效。]
  System.Data.EntityClient.EntityConnection.GetFactory(字符串   providerString)+62
  System.Data.EntityClient.EntityConnection.ChangeConnectionString(字符串   newConnectionString)+263
  System.Data.EntityClient.EntityConnection..ctor(字符串   connectionString)+81
  System.Data.Objects.ObjectContext.CreateEntityConnection(字符串   connectionString)+42
  System.Data.Objects.ObjectContext..ctor(String connectionString,   String defaultContainerName)+16
  shield_trust.db_shieldtrustEntities..ctor()in   d:\信任公司\ shield_trust \ shield_trust \ POCO.Context.cs:23
  shield_trust.user_login.check_login()in   d:\信任公司\ shield_trust \ shield_trust \ user_login.aspx.cs:65
  shield_trust.user_login.entraButton_Click(Object sender,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(字符串   eventArgument)+112
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串   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?

10 个答案:

答案 0 :(得分:14)

尝试运行此命令以获取已安装的提供程序列表,并检查您的提供程序是否存在:

// 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 x.x.x”,您可以从this website获取

答案 1 :(得分:10)

使用我们的应用程序(ASP.NET,测试,Windows服务),我们必须将以下内容添加到我们的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>

答案 2 :(得分:4)

对于我们来说,这是32比64进程。 服务器是64位。 安装的ODP.NET(Oracle客户端)也是64位。 我们的应用程序使用Target平台和#34;任何CPU&#34;和#34;喜欢32位&#34;标志SET:

http://grab.by/v5ki

以32位进程运行。 一旦用未经检查的标志重新编译,一切都开始起作用了。

答案 3 :(得分:3)

如果您收到如下对话框......

&#34;无法找到请求的.NET Framework数据提供程序。它可能没有安装&#34;

查看以下位置的machine.config文件......

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

删除所有空

"DbProviderFactories" nodes.

答案 4 :(得分:2)

令人尴尬的是,我花了三天时间试图解决这个错误。我的“connectionString”

上的“providerName”属性不正确

更改自:

<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

德哦!

答案 5 :(得分:1)

当连接到数据库时,所谓的“数据提供者”用于抽象实现。

您的异常似乎表示目标计算机上不存在给定的数据提供者。您在部署的环境中使用哪个数据库?检查web.config连接字符串以获取详细信息。

您可能必须自己在该计算机上安装给定的数据提供程序(一次),以便可以从全局程序集缓存(GAC)中获取。

答案 6 :(得分:0)

我知道这是旧的,但正如 udog 所解释的那样,错误消息&#34;指定的商店提供商在配置中找不到,或者无效&#34;表明问题所在。因此,根据后端数据库,将提供程序信息添加到配置文件中。如果已经添加,请确保它是正确的。对于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>

答案 7 :(得分:0)

要进一步构建udog的答案,如果您要使用此数据提供程序在服务器上拥有多个应用程序,那么将它添加到machine.config文件可能更有意义。

正如Thomas所说,machine.config文件位于:

  

C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \配置   C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \配置

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文件之间执行文件dif看看服务器之间是否存在差异。

答案 8 :(得分:0)

当我尝试在个人PC上安装独立工具时遇到了相同的错误。我执行了以下步骤。NETFramework 2.0和3.0)。NETFramework 4.7高级服务已重新安装,但在最终使用此简单的修复过程之前,无法解决问题。 下载并安装SSCERuntime_x64-ENU.exe 按照此链接下载https://www.microsoft.com/en-us/download/details.aspx?id=30709 祝你好运。

答案 9 :(得分:0)

添加到Web.config中的语句对我有所帮助。

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