【问题标题】:MemSQL : Error 1049 - while executing procedureMemSQL:错误 1049 - 执行过程时
【发布时间】:2018-10-01 20:22:09
【问题描述】:

我正在学习 MemSQL,作为其中的一部分,我试图从 C# 客户端代码执行一个过程。存储过程存在于 MemSQL 数据库中。但是,我收到错误“发生错误 1049:未知数据库 'mysql'”。 这个问题只针对一个过程,如果我从 C# 客户端执行一个简单的查询,它工作正常。

我正在使用 MySql.Data.MySqlClient .Net 核心类库 6.8.8。

【问题讨论】:

    标签: c# singlestore


    【解决方案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(已存档):

    检查参数,检查参数

    默认:真

    指示是否应根据 服务器。

    这个选项适用于旧版本的客户端:

    UseProcedureBody , 使用过程体 , 过程体

    默认:真

    当设置为 true(默认值)时,Connector/NET 需要 要查看的过程。这使它能够确定 参数类型和顺序。当用户设置选项为 false 连接到数据库没有 SELECT 权限 mysql.proc(存储过程)表或无法查看 INFORMATION_SCHEMA.ROUTINES,然后显式设置所有的类型 调用前的参数并将参数添加到命令中 与它们在过程定义中出现的顺序相同。

    此选项在 Connector/NET 6.3.7 中已弃用并在 连接器/NET 6.10.4;请改用检查参数选项。

    【讨论】:

    • 感谢杰克陈。将 checkparameters=false 添加到连接字符串后,问题得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2023-03-13
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多