我正在使用ADO.NET数据提供程序MySql.Data.MySqlClient
从.NET Core访问MySQL数据库,并且大多数事情都可以正常工作,但是每当我尝试访问存储过程时,都会看到以下异常消息:
MySql.Data.MySqlClient.MySqlException : Table 'mysql.proc' doesn't exist
我能找到的所有文章都建议运行mysql_upgrade
来修复系统表,但这没有发现问题。
实际上,数据库不包含mysql.proc
表-而是it is not supposed to since it is MySQL 8.0!
我已经使用MySQL Installer安装了最新版本的Connector / NET(8.0.15)。
我在做什么错了?
答案 0 :(得分:0)
安装的Connector / NET版本是...无关!
这是.NET Core,并且.NET Core的ADO.NET数据提供程序是通过NuGet获取的-因此请确保您的.NET Core项目正在加载MySql.Data
NuGet软件包的最新版本。
尝试访问版本8+ MySQL数据库上的存储过程时,旧版本的MySql.Data
NuGet软件包(v.8之前的版本)确实出现上述错误。
答案 1 :(得分:0)
如果在获取最新版本的MySql.Data软件包后仍然遇到问题,请确保添加 CheckParameters = false
答案 2 :(得分:0)
签出ADO.Net中的GetSchema函数,尤其是“过程”和“过程参数”集合。
答案 3 :(得分:0)
我知道这则帖子已经过时了,但是如果这个问题仍然有意义... 通过将命令类型更改为文本而不是存储过程,可以解决此问题,并且在命令文本上使用了call命令:
sql = "call yourstoreproc()";
cmd = new Mysql.Data.MySqlClient.MySqlCommand(sql, connection);
cmd.CommandType = System.Data.CommandType.Text;
cmd.ExecuteNonQuery();
答案 4 :(得分:0)
@MikeBeaton解释说,这是无关的版本问题。 部署使用mySql.data和mySql.web依赖项作为版本6.0 ..的应用程序时,然后部署具有连接器版本8.0的计算机时,我遇到了相同的问题
主机上的连接器版本
BIN文件夹组装版本
解决方案
使用旧版本到新版本更新您的web.config和packages.config文件
示例
这里的旧版本是6.9.0,所以我全部用8.0.21.0更新了
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.21.0" newVersion="8.0.21.0" />
</dependentAssembly>
同样可以在此包文件中找到所有这些依赖项,然后全部替换即可解决您的问题。
答案 5 :(得分:0)
我偶然发现了这篇文章,试图通过我的 Azure 托管的 MySQL 数据库找到解决此问题的方法,但没有一个解决方案适用。我想分享对我有用的东西(来自 rfontona's response here):
<块引用>Azure Database for MySQL – Single Server 服务,我们有一个运行 v5.6 的网关,这可能会导致此错误。您可以将连接字符串中的端口更改为 3309(默认为 3306),这会将您连接到网关中的 v8.0 客户端。此处有更多详细信息 - Supported versions - Azure Database for MySQL | Microsoft Docs
在设置 MySqlConnectionStringBuilder 时,我使用了以下内容:
new MySqlConnectionStringBuilder {
...
Port = 3309
}
我假设类似的方法也适用于连接字符串。