【问题标题】:Unable to find the requested .Net Framework Data Provider找不到请求的 .Net Framework 数据提供程序
【发布时间】:2012-06-06 07:23:41
【问题描述】:

我使用 Visual Studio 2010 Ultimate,项目是 c# MVC3 Razor

我有一个项目在本地机器上运行没有任何问题,使用 MySql(来自在线服务器)数据库就好了,但是当我上传它并且当它到达需要从 MySql 服务器获取数据的部分时它给出我这个错误:

找不到请求的 .Net Framework 数据提供程序。它可能不会 安装。

这是我在 Web.config for MySql 中的连接字符串,当我在本地调试项目时运行良好。从表格中读取信息并在页面上显示。

<add name="istakipDBContext" 
connectionString="Server=xxx.xxx.xxx.xxx; Database=xxx; Uid=xxx;
Pwd=xxx;"  providerName="MySql.Data.MySqlClient" />

这是整个堆栈跟踪:

“/”应用程序中的服务器错误。找不到请求的 .Net 框架数据提供者。它可能没有安装。说明:一个 当前 web 执行过程中发生未处理的异常 要求。请查看堆栈跟踪以获取有关 错误及其源自代码的位置。

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

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[ArgumentException: 无法找到请求的 .Net Framework 数据 提供者。它可能没有安装。]
System.Data.Common.DbProviderFactories.GetFactory(字符串 providerInvariantName) +1420503
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(字符串 姓名)+393
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +47
System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel() +9 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +262 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 entityType) +17
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +63
System.Data.Entity.Internal.Linq.InternalSet
1.GetEnumerator() +15
System.Data.Entity.Infrastructure.DbQuery1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40 System.Collections.Generic.List1..ctor(IEnumerable1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable1 来源)+58 在线tercume.Controllers.istakiplerController.Index() 在 C:\wwwroot\nps\nps\Controllers\istakiplerController.cs:21 lambda_method(闭包, ControllerBase, Object[]) +62
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数)+17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数)+27
System.Web.Mvc.c_DisplayClass15.b_12() +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1 过滤器,ActionDescriptor actionDescriptor, IDictionary2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8
1.b__7(IAsyncResult ) +12 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc.c_DisplayClasse.b_d() +50
System.Web.Mvc.SecurityUtil.b
_0(动作 f)+7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(动作动作) +22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970061 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.272

【问题讨论】:

    标签: c# mysql asp.net-mvc-3 razor


    【解决方案1】:

    错误很明显,找不到 MySQL 数据提供者

    如果您部署到生产服务器,可能您还没有部署 MySQL 组件,请检查您是否已将 MySQL dll 部署到应用程序的 bin 文件夹中

    一个常见的问题是,当您在开发沙箱中的 GAC 中安装了组件并且它们不存在于生产服务器中时,请验证 dll 是否在 GAC 中:

    全局程序集缓存 (GAC) 位于:%windir%\assembly

    您可以通过将程序集的 copy always 属性选择为 true 来强制将项目中的引用部署到生产服务器,但是,如果它被配置为解析来自 GAC 的引用那么最好在生产箱中安装GAC中的组件:

    这些是在 GAC 中安装 MySQL 数据提供程序的步骤

    http://blog.jeffreymcmanus.com/555/installing-the-mysql-adonet-connector-into-the-global-assembly-cache/

    总结一下:

    • 解决方案 1:

      运行以下命令在 GAC 中注册 MySQL 数据提供程序(这样您的 MySQL 数据提供程序版本将被安装到服务器中的所有应用程序全局可用)

      "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe" /i MySql.Data.dll

    • 解决方案 2:

      MySql.Data.dll dll 复制到应用程序的bin 目录

    【讨论】:

    • 您能否更具体地说明解决方案以及我需要做什么?
    • 是的,首先告诉我你是否在windows中安装了MySQL二进制文件?如果您在 GAC 中安装和注册 MySQL 程序集的最简单方法是在您的生产服务器中安装相同版本的 MySQL 安装程序,如果您没有,您可以从这里下载它dev.mysql.com/downloads/installer跨度>
    • 我安装了 Connector/Net 6.5.4 并将 dll 包含在 bin 文件夹 MySql.Data 和 MySql.Web 中。据我所知,我的本地项目和 MySql 服务器之间的连接很好,可以读取所有表,正如我所说,MySql 服务器不在我的机器上,而是来自我的在线 MySql 服务器。
    • -1 当然找不到数据提供者,但这不一定与bin的位置有关。
    • @Jupaol:我已经将 MySQL.Data.dll 文件放在 bin 文件夹中,但仍然出现这样的错误。如果我对此有任何其他问题,请告诉我?
    【解决方案2】:

    对于 Microsoft Visual Studio Professional 2012 中的这个特定错误,只需检查 ProviderName :

         <providerName="System.Data.SqlClient"/>
    

    【讨论】:

      【解决方案3】:

      提供程序需要在分层配置文件之一中注册。例如,我在 machine.config 文件中注册了 oracle 提供程序(这似乎是在我使用 setup instaler 安装 odac 时自动完成的)。

      我的 machine.config 看起来像这样:

      <system.data>
      <DbProviderFactories>
        <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.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
        <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="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
      </DbProviderFactories>
      

      要小心,因为在 Asp.Net 应用程序中,层次结构中有另一个名为 aslo web.config 的配置文件。它与 machine.config 位于同一文件夹中。在此链接中解释了 Asp.Net 的配置层次结构:msdn

      如果提供程序未在其中一个文件中注册,则会引发报告的错误。在这种情况下,我认为解决它的最佳方法是直接在您的 asp.net 应用程序 web.config 文件中添加配置。类似的东西:

      <system.data>
      <DbProviderFactories>
        <remove invariant="Oracle.DataAccess.Client" />
        <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.7.20,
                    Culture=neutral,
                    PublicKeyToken=89b483f429c47342" />
      </DbProviderFactories>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-18
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 1970-01-01
        • 2013-07-05
        相关资源
        最近更新 更多