2012-02-02 37 views
5
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
BEGIN 
    ROLLBACK; 
END; 
START TRANSACTION;  

    UPDATE tbl_order SET TransactionID="abc" WHERE OrderID=1; 
    UPDATE tbl_order SET TransactionID="xyz" WHERE OrderID=; 
    UPDATE tbl_order SET TransactionID="zzz" WHERE OrderID=13; 


COMMIT; 

por algún motivo, los pedidos 1 y 13 se completan sin reversión y obtengo un error de sintaxis para el hadler de salida.gestión de errores de transacción mysql

Query: DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ROLLBACK 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
BEGIN 
    ROLLBACK' at line 1 

¿alguien me puede ayudar a descubrir qué estoy haciendo mal?

Gracias de antemano

EDITAR

ACTUALIZACIÓN tbl_order SET TransactionID = "xyz" DONDE IdPedido =;

es intencional

+0

tiro en la oscuridad: es el punto y coma después de deshacer ' '¿Acaba prematuramente el manejador de salida? – sarnold

+0

no .. no ayuda – robert

+0

así que de todos modos seguí adelante y lo hice con código en lugar de usar la consulta mysql para manejar los errores. Asumiendo una conexión abierta MySqlCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.Transaction = conn.BeginTransaction(); try { cmd.CommandText = strSQL; cmd.ExecuteNonQuery(); cmd.Transaction.Commit(); } catch (Excepción ex) { cmd.Transaction.Rollback(); dbLog.ErrorFormat ("*** Reversión de transacción: {0} \ n Parámetros: {1} \ n Ej: {2} \ n", strSQL, ex.InnerException); } – robert

Respuesta

Cuestiones relacionadas