2013-02-21 59 views
0

我正在通過使用mysql connector6.2.3.0(.net)從C#連接mysql 5.1。我想一次插入3個表。因此,我使用的是transaction.Suppose,當插入數據時遇到一些錯誤進入我的第三張表,那麼事務不會回滾。數據被插入到前兩個表中。我的事務是不是回滾時,出現錯誤在C#與MySQL?

這是我的代碼...

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

我認爲,首先,我要禁用自動提交...但我不知道我要設置這個...

請建議我這是怎麼回事錯這個......

+0

你的Mysql數據庫有什麼格式? – 2013-02-21 06:00:26

+0

@DavidGoshadze:對不起,格式意味着什麼? – Saravanan 2013-02-21 06:02:57

+1

這是來自Docs的內容:'在MySQL中,只有InnoDB和BDB(BerkeleyDB)表格格式支持事務處理。其他標準存儲引擎忽略事務並且不能回滾數據修改。' – 2013-02-21 06:08:30

回答

3

當我們發現它是數據庫引擎的問題,你可以使用

ALTER TABLE tablename ENGINE = innodb 

參考​​