刚刚接触MySql事务处理,总是无法回滚,请大家帮忙看下,不甚感激。
封装函数如下:
public void ExecuteTransaction(List<string> 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(); } } } }
当我调用的时候,比如执行多个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<string> { sql1, sql2 });
测试2周围的单引号故意写错,但是sql1还是执行了。
public void ExecuteTransaction(List<string> 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(); } } } }
已解决,是引擎问题。MyISAM不支持事务,需要修改为INNODB