首页 > 解决方案 > mysql权限错误。涉及 SELECT 命令

问题描述

当我尝试单击使用 mysql 的应用程序(VS 2017)上的按钮时,它给了我这个错误:

'SELECT 命令拒绝用户'xx_sorci'@'xx-xx-xxx-x8.try.xx.com' 用于表'proc''

奇怪的是我的表名叫做usersnot proc

那可能是个问题。这也使用存储过程,因此也可以提供帮助。

视觉工作室代码:


using (MySqlConnection mysqlCon = new MySqlConnection(connectionString))

    {
Some of the code https://pastebin.com/raw/Jmcn3mfh

        mysqlCon.Open();
        MySqlDataAdapter sqlDa = new MySqlDataAdapter("BookSearchByValue", mysqlCon);
        sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
        sqlDa.SelectCommand.Parameters.AddWithValue("_SearchValue", txtSearch.Text);
        DataTable dtblBook = new DataTable();
        sqlDa.Fill(dtblBook);
        dgvBook.DataSource = dtblBook;
        dgvBook.Columns[0].Visible = false;
    }

程序:

PROCEDURE `BookSearchByValue`
    (
        _SearchValue VARCHAR(45)
    )
        BEGIN
            SELECT * FROM login
            WHERE Username LIKE CONCAT('%' +_SearchValue+'%') 
            || Password LIKE CONCAT('%' +_SearchValue+'%');
        END

编辑:将此添加Use Procedure Bodies = false;到 con 字符串中并且它有效。

标签: c#mysql

解决方案


我假设您使用的是 Connector/NET(又名 MySql.Data)。(完整的异常细节将对我们有所帮助;请在下次包括它们:http: //idownvotedbecau.se/noexceptiondetails/。)

这听起来像是MySQL 错误 52294的变体,其中 Connector/NET 需要能够读取mysql.proc表才能执行存储过程。有两种可能的解决方案:

  1. CheckParameters=False在您的连接字符串中设置。这将禁用存储过程元数据的检索(避免错误),但如果您没有完全正确地获取参数的顺序和类型,则可能会导致调用其他存储过程的更难调试的问题。(Connector/NET 不能再使用元数据为您映射它们。)
  2. 切换到另一个没有此错误的 ADO.NET MySQL 库:MySqlConnector on NuGet。它与 Connector/NET 高度兼容,执行速度更快,并修复了许多已知问题

推荐阅读