首页 新闻 会员 周边

C#MySql事务回滚求解

0
悬赏园豆:15 [已关闭问题] 关闭于 2016-05-17 23:12

刚刚接触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();                    }                }            }        }

问题补充:

尝试先执行set autocommit=0也无效

DeeRoad的主页 DeeRoad | 初学一级 | 园豆:3
提问于:2016-05-17 22:36
< >
分享
所有回答(1)
0

已解决,是引擎问题。MyISAM不支持事务,需要修改为INNODB

DeeRoad | 园豆:3 (初学一级) | 2016-05-17 23:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册