我正在尝试在 .net core 1.0 中将 dapper 与 mysql 结合使用。我正在使用这个 mysql 连接器:https://github.com/bgrainger/MySqlConnector
我知道连接器处于 alpha 阶段,但我想知道在将它与 dapper 一起使用时是否有人遇到过类似的问题。
这是我的简单模型:
public List<GeneralModel> GetAllLists()
{
try
{
using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
{
return connection.Query<GeneralModel>("SELECT * FROM lists.general").ToList();
}
}
catch (Exception)
{
throw;
}
}
这是 Controller :
public IActionResult Index()
{
GeneralModel GenRepo = new GeneralModel();
return View(GenRepo.GetAllLists());
}
当我第一次进入索引页面时,它起作用了。如果我刷新,我会收到“用户访问被拒绝...”。我不知道是什么导致了错误。我认为问题不在我的代码中。
编辑:
我猜问题出在连接器上,因为这在刷新后也会返回错误:
List<GeneralModel> lists = new List<GeneralModel>();
using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
{
using (DbCommand myCommand = connection.CreateCommand())
{
myCommand.CommandText = "SELECT * FROM lists.general";
connection.Open();
using (DbDataReader myReader = myCommand.ExecuteReader())
{
while (myReader.Read())
{
GeneralModel tmpGen = new GeneralModel();
tmpGen.name = myReader["name"].ToString();
tmpGen.description = myReader["description"].ToString();
tmpGen.language = myReader["language "].ToString();
lists.Add(tmpGen);
}
}
connection.Close();
}
}
return lists;
最佳答案
此错误是由 MySqlConnector 引起的没有正确处理 COM_CHANGE_USER
packet 的快速路径.
MySQL 服务器(版本 5.6 和 5.7)似乎不会立即接受用户的凭据,但总是返回 Authentication Method Switch Request Packet . MariaDB(您正在使用)确实实现了快速路径并立即返回一个 OK 数据包。
连接器现已更新以处理此响应,并且应该停止抛出虚假的“拒绝访问”异常。 fix在0.1.0-alpha09 .
关于mysql - 每第二次命中获得 "Access denied for user...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362581/