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

z jakiegoś powodu zlecenia 1 i 13 są wypełniane bez wycofywania i otrzymuję błąd składni dla wyjścia hadler.Obsługa błędów transakcji 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 

Czy ktoś może mi pomóc dowiedzieć się, co robię źle?

góry dzięki

EDIT

UPDATE tbl_order SET transactionId = "xyz" GDZIE OrderID =;

jest zamierzone

+0

strzał w ciemności: jest średnik po 'wycofywania "przedwcześnie kończenie obsługi wyjścia? – sarnold

+0

nope .. to nie pomaga – robert

+0

, więc mimo to poszedłem do przodu i zrobiłem to z kodem zamiast używać mysql zapytania do obsługi błędów. Zakładając otwarte połączenie MySqlCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.Transaction = conn.BeginTransaction(); try { cmd.CommandText = strSQL; cmd.ExecuteNonQuery(); cmd.Transaction.Commit(); } catch (Exception ex) { cmd.Transaction.Rollback(); dbLog.ErrorFormat ("*** Wycofanie transakcji: {0} \ n Params: {1} \ n Ex: {2} \ n", strSQL, ex.InnerException); } – robert

Odpowiedz