2011-03-16 25 views
6

MySQL 5.0.27 kullanıyorum ve işlem görmeye çalışıyorum. Bu işe alınamıyor halaMySQL'deki İşlemler - Geri Dönülemiyor

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

ve: Ben bu öğretici izledi. Güncelleme için çalışıyorum tablo InnoDB ise ve yürütmek çalıştık 'set autocommit = 0' ama ben yazdım kod şudur .... şey yapıyor gibi görünmüyor:

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

İkinci komut, 'etrafındaki' en-us 'eksik olduğundan başarısız oluyor. Bu, ilk sorguyu da önceki bir değere geri döndürmeli, ancak değil. Bana neyi yanlış yaptığımı söyler misin ??

MySQLConnector v. 6.3.6.0

MySQL v. 5.0.27

C# VS2010

+5

"ex" istisnasını yutuyorsunuz. İyi değil! Bunu yapma! –

+0

Hangi depolama motoru kullanıyorsunuz? İşlem doğrudan bir yönetici veya konsol kullanarak çalışır mı? –

+0

depolama motoru InnoDB 'e göre (SQLYog -> seçme tablosunda, gelişmiş özellikler sağ tıklayın, motor = InnoDB Sürüm 10) – Austin

cevap

4

Kötü veri gösteren> < vardı ikinci veritabanı açık vardı ... Bu yöntem çalışır. Hatta gerek yoktu çıkıyor:

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

Yani bu kod işlemleri için çalışır.