当我尝试单击我的应用程序(VS 2017)上使用 mysql 的按钮时,它给了我这个错误:
'SELECT command denied to user 'xx_sorci'@'xx-xx-xxx-x8.try.xx.com' for table 'proc''
奇怪的是我的表名叫做users
而不是proc
。
这可能是个问题。此外,这还使用存储过程,因此也可以提供帮助。
Visual Studio Code :
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字符串中并且它起作用了。
最佳答案
我假设您使用的是 Connector/NET(又名 MySql.Data)。 (完整的异常(exception)详细信息将对我们有所帮助;请下次包含它们: http://idownvotedbecau.se/noexceptiondetails/ 。)
这听起来像是 MySQL Bug 52294 的变体其中 Connector/NET 需要能够读取 mysql.proc 表才能执行存储过程。有两种可能的解决方案:
- 在连接字符串中设置
CheckParameters=False
。这将禁用存储过程元数据的检索(避免错误),但如果您没有完全正确地获得参数的顺序和类型,则可能会导致调用其他存储过程时出现难以调试的问题。 (Connector/NET 无法再使用元数据为您映射它们。) - 切换到不存在此错误的其他 ADO.NET MySQL 库:MySqlConnector上NuGet 。它与 Connector/NET 高度兼容,执行速度更快,并修复了大量 known issues .
关于c# - mysql 权限错误。涉及SELECT命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58897161/