2012-02-02 14 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; 

per qualche motivo l'ordine 1 e 13 vengono compilati senza rollback e viene visualizzato l'errore di sintassi per l'exitler di uscita.gestione errore mysql transazione

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 

qualcuno può aiutarmi a capire cosa sto facendo di sbagliato?

Grazie in anticipo

EDIT

UPDATE tbl_order SET TransactionID = "xyz" WHERE IDOrdine =;

è intenzionale

+0

sparo nel buio: è il punto e virgola dopo 'rollback 'Termina prematuramente il gestore di uscita? – sarnold

+0

no .. non aiuta – robert

+0

così comunque sono andato avanti e l'ho fatto con il codice invece di usare la query mysql per gestire gli errori. Supponendo una connessione aperta MySqlCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.Transaction = conn.BeginTransaction(); prova { cmd.CommandText = strSQL; cmd.ExecuteNonQuery(); cmd.Transaction.Commit(); } catch (Eccezione ex) { cmd.Transaction.Rollback(); dbLog.ErrorFormat ("*** Rollback transazione: {0} \ n Params: {1} \ n Es: {2} \ n", strSQL, ex.InnerException); } – robert

risposta

Problemi correlati