2

我使用 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 Framework 数据提供程序。它可能没有安装。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

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

源错误:

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

堆栈跟踪:

[ArgumentException:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1420503
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name) +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.InternalSet 1.GetEnumerator() +15 System.Data.Entity.Infrastructure.DbQuery1.Initialize() +63
System.Data.Entity.Internal.Linq.InternalSet

1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40 System.Collections.Generic.List1..ctor(IEnumerable 1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable1 source) +58 onlinetercume.Controllers.istakiplerController.Index() in C:\wwwroot\nps\nps\Controllers\istakiplerController.cs:21 lambda_method(Closure , ControllerBase , Object[] ) +62
System .Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器, Object[] 参数) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2 参数) +27 System.Web.Mvc.<> c_DisplayClass15.b _12() +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func 1 过滤器,ActionDescriptor actionDescriptor,IDictionary 1.b__7(IAsyncResult 2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary

1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
2 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
) +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

4

3 回答 3

3

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

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

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

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

您可以通过将程序集的始终复制属性选择为 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.dlldll 复制到应用程序的bin目录中

于 2012-06-01T02:42:43.870 回答
1

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

     <providerName="System.Data.SqlClient"/>
于 2015-06-29T04:34:48.517 回答
0

提供程序需要在分层配置文件之一中注册。例如,我在 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>

于 2016-10-07T13:02:20.847 回答