无法找到请求的.Net Framework数据提供程序

时间:2012-06-01 02:38:03

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

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

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

  

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

这是我在MySql的Web.config中的连接字符串,当我在本地调试项目时运行正常。从页面上的表格和节目中读取信息。

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

这是整个堆栈跟踪:

  '/'应用程序中的服务器错误。无法找到所请求的.Net   框架数据提供者。它可能没有安装。描述:一个   在执行当前Web期间发生了未处理的异常   请求。请查看堆栈跟踪以获取有关的更多信息   错误以及它在代码中的起源。

     

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

     

来源错误:

     

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

     

堆栈追踪:

     

[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(Type   entityType)+17
  System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +63
System.Data.Entity.Internal.Linq.InternalSet
1.GetEnumerator()+15
  System.Data.Entity.Infrastructure.DbQuery 1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40 System.Collections.Generic.List 1..ctor(IEnumerable的1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable 1   来源)+58 onlinetercume.Controllers.istakiplerController.Index()   在   C:\ wwwroot的\ NPS \ NPS \控制器\ istakiplerController.cs:21   lambda_method(Closure,ControllerBase,Object [])+62
  System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase   controller,Object []参数)+17
  System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext   controllerContext,IDictionary 2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2   参数)+27
  System.Web.Mvc&LT;&GT; C_ DisplayClass15.b _12()   +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter)   filter,ActionExecutingContext preContext,Func 1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1个过滤器,ActionDescriptor actionDescriptor,   IDictionary的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
1.b__7(IAsyncResult的   )+12 System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62 System.Web.Mvc。&lt;&gt; c _DisplayClasse.b_ d()+50 <登记/>   System.Web.Mvc.SecurityUtil.b _0(动作f)+7   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)   +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&amp; completedSynchronously)+184

     

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

3 个答案:

答案 0 :(得分:3)

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

如果您部署到生产服务器上,或许您尚未部署MySQL组件,请检查您是否已将MySQL dll部署到应用程序的bin文件夹中

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

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

如果将程序集的 copy always 属性设置为true,则可以强制将项目的引用部署到生产服务器,但是,如果将其配置为从GAC解析引用那么最好在生产箱中的GAC中安装组件:

enter image description here

enter image description here

以下是在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 目录

答案 1 :(得分:1)

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

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

答案 2 :(得分: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 aplications中,层次结构中还有另一个名为aslo web.config的cofig文件。它与machine.config位于同一文件夹中。在此链接中解释了Asp.Net的配置层次结构:msdn

如果提供程序未在其中一个文件中注册,则会引发报告的错误。在这种情况下,我认为解决它的最佳方法是在asp.net aplication 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>

相关问题