【发布时间】:2018-10-01 20:22:09
【问题描述】:
我正在学习 MemSQL,作为其中的一部分,我试图从 C# 客户端代码执行一个过程。存储过程存在于 MemSQL 数据库中。但是,我收到错误“发生错误 1049:未知数据库 'mysql'”。 这个问题只针对一个过程,如果我从 C# 客户端执行一个简单的查询,它工作正常。
我正在使用 MySql.Data.MySqlClient .Net 核心类库 6.8.8。
【问题讨论】:
标签: c# singlestore
我正在学习 MemSQL,作为其中的一部分,我试图从 C# 客户端代码执行一个过程。存储过程存在于 MemSQL 数据库中。但是,我收到错误“发生错误 1049:未知数据库 'mysql'”。 这个问题只针对一个过程,如果我从 C# 客户端执行一个简单的查询,它工作正常。
我正在使用 MySql.Data.MySqlClient .Net 核心类库 6.8.8。
【问题讨论】:
标签: c# singlestore
尝试将连接选项 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(已存档):
检查参数,检查参数
默认:真
指示是否应根据 服务器。
这个选项适用于旧版本的客户端:
UseProcedureBody , 使用过程体 , 过程体
默认:真
当设置为 true(默认值)时,Connector/NET 需要 要查看的过程。这使它能够确定 参数类型和顺序。当用户设置选项为 false 连接到数据库没有 SELECT 权限 mysql.proc(存储过程)表或无法查看 INFORMATION_SCHEMA.ROUTINES,然后显式设置所有的类型 调用前的参数并将参数添加到命令中 与它们在过程定义中出现的顺序相同。
此选项在 Connector/NET 6.3.7 中已弃用并在 连接器/NET 6.10.4;请改用检查参数选项。
【讨论】: