无法找到或加载已注册的.Net Framework 数据提供程序。 (系统.数据)

问题描述 投票:0回答:2

我打开 SSMS 并右键单击数据库,然后

Tasks -> IMport Data
从源导入数据,但一旦我单击,我就会收到此错误:

Failed to find or load the registered .Net Framework Data Provider. (System.Data)

这是完整的错误:

===================================

This wizard will close because it encountered the following error: (Microsoft SQL Server)

------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=13.0.2164.0&EvtSrc=Microsoft.SqlServer.Management.UI.WizardFrameworkErrorSR&EvtID=UncaughtException&LinkId=20476

===================================

Exception has been thrown by the target of an invocation. (mscorlib)

------------------------------
Program Location:

   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
   at Microsoft.SqlServer.Dts.DtsWizard.Step1.DataSourceComboBox_SelectedIndexChanged(Object sender, EventArgs e)
   at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
   at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
   at Microsoft.SqlServer.Dts.DtsWizard.Step1.OnInitializePage(EventArgs e)
   at Microsoft.SqlServer.Management.UI.WizardPage.RaiseEnterPage()
   at Microsoft.SqlServer.Management.UI.WizardForm.NextPage(WizardPage nextPage)
   at Microsoft.SqlServer.Management.UI.WizardForm.Next_Click(Object sender, EventArgs e)

===================================

Failed to find or load the registered .Net Framework Data Provider. (System.Data)

------------------------------
Program Location:

   at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
   at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
   at Microsoft.SqlServer.Dts.DtsWizard.AdoNetForm..ctor(DataSourceInfo info, Boolean bDest, WizardInputs inputs, WizardPage page)

我的计算机上安装了 SQL 2012 和 SQL 2014,但两者都出现错误。我该怎么做才能解决这个问题?

sql-server sql-server-2012 sql-server-2014
2个回答
10
投票

啊啊啊!同样的问题几个月来一直让我发疯。但我刚刚想通了。

我的

machine.config
文件中有死的/过时的/错误的条目。

C:\Windows\Microsoft.NET\Framework64 4.0.30319\Config C:\Windows\Microsoft.NET\Framework 4.0.30319\Config

在这些位置中,我打开了

machine.config
文件,并注释掉了
Devart
MySql
的条目。然后我关闭/重新打开 SSMS,任务 -> 导入不再抛出错误。现在我并不是说 MySQL 或 DevArt 提供程序是您的具体问题,而是从
machine.config
中“删除”这些条目为我解决了问题。

<DbProviderFactories>
  <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  <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" />
  <!--<add name="dotConnect for MySQL" invariant="Devart.Data.MySql" description="Devart dotConnect for MySQL" type="Devart.Data.MySql.MySqlProviderFactory, Devart.Data.MySql, Version=8.4.492.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
  <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=8.5.492.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
  <add name="dotConnect for PostgreSQL" invariant="Devart.Data.PostgreSql" description="Devart dotConnect for PostgreSQL" type="Devart.Data.PostgreSql.PgSqlProviderFactory, Devart.Data.PostgreSql, Version=7.4.492.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
  <add name="dotConnect for SQLite" invariant="Devart.Data.SQLite" description="Devart dotConnect for SQLite" type="Devart.Data.SQLite.SQLiteProviderFactory, Devart.Data.SQLite, Version=5.3.492.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
  <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.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  -->
</DbProviderFactories>

希望对您有帮助。

注意:直到我注释掉 Framework 和 Framework64 文件夹中的这些条目后,我的问题才消失。


0
投票

如果有人仍然想知道为什么会发生这样的事情,这就是我的发现: 我卸载了 MySQL 8.0 服务器,但安装了许多其他 MySQL 组件。因此,当 SSMS 搜索服务器的 ODBC 驱动程序时,我的猜测是该驱动程序已经消失,但

machine.config
文件尚未更新。

© www.soinside.com 2019 - 2024. All rights reserved.