Py学习  »  DATABASE

mysql-C#在事务中抛出用户不退出例外

kuma DK • 3 年前 • 1290 次点击  

我正在C#中运行一个MySQL事务,但第二次查询失败。我可以通过以下方式获得豁免:

int no = sql_loc.ExecuteNonQuery();

db_local = "SERVER=localhost; Database=sync_r; UID=kandy; Password=kandy500;allow user variables=true";

MySqlConnection con_local = new MySqlConnection(db_local);
con_local.Open();

delq = "delete from tbl_recipes";  // all records
query = "insert into tbl_recipes(cat_id) values(6)";

MySqlTransaction tran = con_local.BeginTransaction();
MySqlCommand sql_loc = con_local.CreateCommand();
sql_loc.Transaction = tran;

sql_loc.CommandText = delq;
sql_loc.ExecuteNonQuery();
sql_loc.CommandText = query;
int no = sql_loc.ExecuteNonQuery();
if (no == 1)
    sql_loc.Transaction.Commit();
else
    sql_loc.Transaction.Rollback();

下面是抛出的错误

{"The user specified as a definer ('root'@'%') does not exist"}

但这不是我指定的用户。我该怎么解决这个问题??真正的问题在哪里?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133223
 
1290 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Bill Karwin
Reply   •   1 楼
Bill Karwin    3 年前

正如在上面的评论中所讨论的,错误来自一个触发器,该触发器在执行时试图采用其定义者的标识,但定义者('root'@')不再存在于MySQL实例上。

解决方法是创建该用户(即使您创建了该用户,然后禁用了身份验证)。

我们在我工作的地方这样做。我们使用具有超级权限的特殊用户定义触发器、存储过程和视图,尽管我们从未将该用户用于任何数据库访问。我们为应用程序和个人开发者创建其他MySQL用户,但不向这些用户授予超级权限。