2011-03-16 14 views
6

Estoy usando MySQL 5.0.27 y estoy tratando de hacer que las transacciones funcionen. He seguido este tutorial:Transacciones en MySQL - No se puede deshacer

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

y todavía no puede conseguir éstos para trabajar. La tabla que estoy tratando de actualizar es InnoDB y han intentado ejecutar 'set de confirmación automática = 0', pero no parece estar haciendo nada .... El código que he escrito es el siguiente:

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

El segundo comando falla ya que falta el 'around' en-us '. Esto debería revertir la primera consulta también a un valor anterior, pero no es así. ¿Me puedes decir lo que estoy haciendo mal?

. MySQLConnector v 6.3.6.0

MySQL v. 5.0.27

C# VS2010

+5

Se está tragando la excepción 'ex'. ¡No está bien! ¡No hagas eso! –

+0

¿Qué motor de almacenamiento está utilizando? ¿Las transacciones funcionan directamente usando un administrador o una consola? –

+0

el motor de almacenamiento es InnoDB por lo que puedo decir (en SQLYog -> seleccionar tabla, clic derecho en propiedades avanzadas, motor = InnoDB Versión 10) – Austin

Respuesta

4

tuve una segunda base de datos abierta que tenía los datos mala actuación> < ... Este método funciona. Resulta que ni siquiera necesitaba:

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

Este código funciona para las transacciones.

Cuestiones relacionadas