我正在学习MemSQL,为此,我试图从C#客户端代码执行一个过程。该存储过程存在于MemSQL数据库中。但是,我收到错误“发生错误1049:未知数据库'mysql'”。 此问题仅适用于过程,如果我从C#客户端执行简单查询,则效果很好。
我正在使用MySql.Data.MySqlClient .Net核心类库6.8.8。
答案 0 :(得分:1)
尝试将连接选项CheckParameters设置为false。
.NET MySQL驱动程序尝试查询mysql
数据库以获取有关存储过程的参数的信息,这不适用于MemSQL。
来自https://dev.mysql.com/doc/connector-net/en/connector-net-programming-stored.html:
当您调用存储过程(在MySQL 8.0发行系列之前的版本中)时,命令对象将进行附加的SELECT调用以确定存储过程的参数。您必须确保调用该过程的用户对mysql.proc表具有SELECT特权,以使他们能够验证参数。否则,调用该过程将导致错误。
这是默认行为,但可以使用连接选项进行更改:
来自https://dev.mysql.com/doc/connector-net/en/connector-net-6-10-connection-options.html
CheckParameters,检查参数
默认值:true
指示是否应对照 服务器。
以及较旧版本的客户端的此选项:
UseProcedureBodies,Use Procedure Bodies,过程主体
默认值:true
设置为true时,默认值Connector / NET要求使用主体 可见的程序。这使它能够确定 参数类型和顺序。用户设置为false 连接到数据库不具有SELECT特权 mysql.proc(存储过程)表或无法查看 INFORMATION_SCHEMA.ROUTINES,然后显式设置所有类型 调用之前的参数,并将参数添加到命令中 按照它们在过程定义中出现的顺序。
此选项在Connector / NET 6.3.7中已弃用,并在 连接器/ NET 6.10.4;请使用“检查参数”选项。