c# - mysql权限错误。涉及 SELECT 命令
问题描述
当我尝试单击使用 mysql 的应用程序(VS 2017)上的按钮时,它给了我这个错误:
'SELECT 命令拒绝用户'xx_sorci'@'xx-xx-xxx-x8.try.xx.com' 用于表'proc''
奇怪的是我的表名叫做users
not 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 字符串中并且它有效。
解决方案
我假设您使用的是 Connector/NET(又名 MySql.Data)。(完整的异常细节将对我们有所帮助;请在下次包括它们:http: //idownvotedbecau.se/noexceptiondetails/。)
这听起来像是MySQL 错误 52294的变体,其中 Connector/NET 需要能够读取mysql.proc
表才能执行存储过程。有两种可能的解决方案:
CheckParameters=False
在您的连接字符串中设置。这将禁用存储过程元数据的检索(避免错误),但如果您没有完全正确地获取参数的顺序和类型,则可能会导致调用其他存储过程的更难调试的问题。(Connector/NET 不能再使用元数据为您映射它们。)- 切换到另一个没有此错误的 ADO.NET MySQL 库:MySqlConnector on NuGet。它与 Connector/NET 高度兼容,执行速度更快,并修复了许多已知问题。