(我们使用.net框架4.8)
因此,在我们的代码中,这就是我们获取有关实现 DbProviderFactory 的所有已安装提供程序的信息的方式:
DbProviderFactories.GetFactoryClasses();
这适用于大多数连接器,并且适用于 MySql v8.0.25 连接器。但是当我升级到MySql 8.0.33时,它不再在表中列出了。
在网上查找时,人们建议将这些行添加到 app.config 中:
<system.data>
<DbProviderFactories >
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.33.1, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
但这并没有解决问题。此外,我尝试使用以下行显式检索 MySql 提供程序:
DbProviderFactory test = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
但这会抛出一个异常,表明连接器未安装,这显然是:
有人遇到过这种情况吗?我无法找到两个版本之间会导致这种行为变化的任何差异,并且我在网上找到的任何内容似乎都无法解决我的问题。预先感谢。
编辑:在尝试一些配置设置时,我得到了方法
DbProviderFactories.GetFactoryClasses();
要找到它,但是当我后来尝试像这样检索它时:
DbProviderFactories.GetFactory(dbProvider.InvariantName)
它抛出以下异常:
System.Configuration.ConfigurationErrorsException: 'Failed to find or load the registered .Net Framework Data Provider.'
我还尝试将 MySql.Data.dll 文件添加到 bin 文件夹中,以及在 GAC 中手动注册它,但没有解决问题
在网上查找时,人们建议将这些行添加到 app.config 中:[snip]
我从https://bugs.mysql.com/bug.php?id=113561获取了你的测试程序。
我使用 NuGet Package Manager 安装最新版本 (8.2.0) 的 MySql.Data。
然后我编辑
App.config
以包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.2.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
</configuration>
当我运行程序时,它通过
MySqlClientFactory
和DbProviderFactories.GetFactoryClasses
成功检索了DbProviderFactories.GetFactory
的v8.2.0.0。