当mysql的C#出现问题时,我的事务不会回滚

本文关键字:事务 我的 mysql 问题 | 更新日期: 2023-09-27 18:00:24

我使用mysql连接器6.2.3.0(.net)从C#连接mysql 5.1。我想一次插入3个表。所以,我使用transaction。假设在将数据插入我的第三个表时遇到一些错误,那么事务没有回滚。数据插入前两个表中。

这是我的密码。。。

MySqlDataAdapter da = new MySqlDataAdapter();
 DBUtil cUtil = new DBUtil();
 MySqlConnection mysqlCon=null;
 MySqlTransaction txn = null;
try
{
    mysqlCon = cUtil.getDbConnection();
    txn = mysqlCon.BeginTransaction();
    //1 
    sql = "insert into test_details()";
    da.InsertCommand = new MySqlCommand(sql, mysqlCon,txn);
    da.InsertCommand.ExecuteNonQuery();
    //2
    sql = "insert into task_details()";
    da.InsertCommand = new MySqlCommand(sql, mysqlCon,txn);
    da.InsertCommand.ExecuteNonQuery();
    sql = "select task_id from task_details where test_id='" + testId + "'";
    da.SelectCommand = new MySqlCommand(sql, mysqlCon,txn);
    dt1 = new System.Data.DataTable();
    da.Fill(dt1);
    string task_id = dt1.Rows[0]["task_id"].ToString();
    //3
    sql = "insert into test_evaluators()";
    da.InsertCommand = new MySqlCommand(sql, mysqlCon,txn);
    da.InsertCommand.ExecuteNonQuery();
    txn.Commit();
    mysqlCon.Close();
    da.Dispose();
}
catch (Exception e)
{
    txn.Rollback();
    mysqlCon.Close();
}

我想,一开始,我想禁用自动提交。。。但我不知道该把这个放在哪里。。。

请告诉我这个怎么了。。。

当mysql的C#出现问题时,我的事务不会回滚

当我们发现这是DB引擎的问题时,您可以使用

ALTER TABLE tablename ENGINE = innodb

参考文档