刚刚接触MySql事务处理,总是无法回滚,请大家帮忙看下,不甚感激。
封装函数如下:
public void ExecuteTransaction(ListsqlList)
{using (var conn = newMySqlConnection(_connStr))
{
conn.Open();using (var trans =conn.BeginTransaction())
{try{foreach (var sql insqlList)
{using (var cmd = newMySqlCommand(sql, conn, trans))
{
cmd.ExecuteNonQuery();
}
}
trans.Commit();
}catch{
trans.Rollback();
}
}
}
}
当我调用的时候,比如执行多个SQL语句,第一个SQL正确,第二个SQL有语法错误的时候,第一个SQL语句还是提交到数据库执行了;我想第二个个SQL如果有语法错误,第一个SQL也回滚,请大家帮忙。
如
var sql1="INSERT INTO `order`(`orderid`,`name`) values(123,'测试1';)";var sql2="INSERT INTO `order`(`orderid`,`name`) values(234,`测试2`;)";
ExecuteTransaction(new List{
sql1,
sql2
});
测试2周围的单引号故意写错,但是sql1还是执行了。
public void ExecuteTransaction(List sqlList) { using (var conn = new MySqlConnection(_connStr)) { conn.Open(); using (var trans = conn.BeginTransaction()) { try { foreach (var sql in sqlList) { using (var cmd = new MySqlCommand(sql, conn, trans)) { cmd.ExecuteNonQuery(); } } trans.Commit(); } catch { trans.Rollback(); } } } }