我使用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.InternalSet1.Initialize() +63
1.GetEnumerator()+15
System.Data.Entity.Internal.Linq.InternalSet
System.Data.Entity.Infrastructure.DbQuery1.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,IDictionary2 parameters) +208
2 参数)+27
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
System.Web.Mvc&LT;&GT; C_ DisplayClass15.b _12() +55 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter) filter,ActionExecutingContext preContext,Func1 continuation) +263
1个过滤器,ActionDescriptor actionDescriptor, IDictionary的
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList2 parameters) +191
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.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
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
答案 0 :(得分:3)
错误很明显,找不到MySQL数据提供程序
如果您部署到生产服务器上,或许您尚未部署MySQL组件,请检查您是否已将MySQL dll部署到应用程序的bin文件夹中
一个常见问题是当您在开发沙箱中的GAC中安装了组件并且它们不在生产服务器中时,请验证该DLL是否在GAC中:
全局程序集缓存(GAC)位于:%windir%\assembly
如果将程序集的 copy always 属性设置为true,则可以强制将项目的引用部署到生产服务器,但是,如果将其配置为从GAC解析引用那么最好在生产箱中的GAC中安装组件:
以下是在GAC中安装MySQL数据提供程序的步骤
总结:
解决方案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>