当我试图点击使用mysql的应用程序(VS 2017(上的按钮时,会出现以下错误:
拒绝用户'xx_sorci'@'xx-xx-xxx-x8.try.xx.com'执行表'proc'的'SELECT命令
奇怪的是,我的表名被称为users
,而不是proc
。
这可能是个问题。此外,这还使用了存储过程,因此也会有所帮助。
Visual studio代码:
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(。(完整的异常详细信息将对我们有所帮助;请下次包括它们:http://idownvotedbecau.se/noexceptiondetails/.)
这听起来像是MySQL Bug 52294的一个变体,其中Connector/NET需要读取mysql.proc
表才能执行存储过程。有两种可能的解决方案:
- 在连接字符串中设置
CheckParameters=False
。这将禁用存储过程元数据的检索(避免错误(,但如果参数的顺序和类型不正确,则可能会导致调用其他存储过程时出现更难调试的问题。(Connector/NET无法再使用元数据为您映射它们。( - 切换到另一个没有此错误的ADO.NET MySQL库:NuGet上的MySqlConnector。它与Connector/NET高度兼容,性能更快,并修复了许多已知问题