2011-03-16 125 views
6

我正在使用MySQL 5.0.27,並試圖讓事務工作。我跟着這個教程:在MySQL中的事務 - 無法回滾

http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqltransaction.html

,但仍無法得到這些工作。我試圖更新的表是InnoDB,並試圖執行'set autocommit = 0',但它似乎沒有做任何事情....我寫的代碼如下:

public int transactionUpdate() 
{ 
    MySqlConnection connection = new MySqlConnection(connStr); 
    connection.Open(); 
    MySqlCommand command = connection.CreateCommand(); 
    MySqlTransaction trans; 
    trans = connection.BeginTransaction(); 
    command.Connection = connection; 
    command.Transaction = trans; 
    try 
    { 
     command.CommandText = "SET autocommit = 0"; 
     command.executeNonQuery(); 
     command.CommandText = "UPDATE TBL.rec_lang rl SET rl.lang_code = 'en-us' WHERE rl.recording=123456"; 
     command.executeNonQuery(); 
     command.CommandText = "UPDATE TBL.rec_lang rl SET rl.lang_code = en-us WHERE rl.recording=123456";  
     command.executeNonQuery(); 
     trans.Commit(); 
    } 
    catch(Exception ex) 
    { 
     try 
     { 
      trans.Rollback(); 
     } 
     catch(MySqlException mse) 
     { 
      log.error(mse); 
     } 
    } 
} 

第二個命令失敗,因爲它缺少'around'en-us'。這應該回滾第一個查詢以及以前的值,但它不是。你能告訴我我在做什麼錯嗎?

MySQLConnector訴6.3.6.0

MySQL的訴5.0.27

C#VS2010

+5

你正在吞食例外'ex'。不好!不要這樣做! – 2011-03-16 22:01:54

+0

您正在使用什麼存儲引擎?直接使用管理員或控制檯進行交易工作? – 2011-03-16 22:08:26

+0

存儲引擎是InnoDB據我所知(在SQLYog - >選擇表中,右擊高級屬性,引擎= InnoDB版本10) – Austin 2011-03-16 22:11:33

回答

4

我有第二個數據庫打開那個有壞的數據顯示> < ...這種方法可行。事實證明,我甚至不需要:

command.CommandText = "SET autocommit = 0"; 
command.executeNonQuery(); 

所以這段代碼的確適用於交易。