我打开 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,但两者都出现错误。我该怎么做才能解决这个问题?
啊啊啊!同样的问题几个月来一直让我发疯。但我刚刚想通了。
我的
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 文件夹中的这些条目后,我的问题才消失。
如果有人仍然想知道为什么会发生这样的事情,这就是我的发现: 我卸载了 MySQL 8.0 服务器,但安装了许多其他 MySQL 组件。因此,当 SSMS 搜索服务器的 ODBC 驱动程序时,我的猜测是该驱动程序已经消失,但
machine.config
文件尚未更新。