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

vì một số lý do thứ tự 1 và 13 được lấp đầy mà không có rollback và tôi nhận được lỗi cú pháp cho trình quản lý thoát.xử lý lỗi giao dịch 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 

ai đó có thể giúp tôi tìm ra những gì tôi đang làm sai?

Cảm ơn trước

EDIT

CẬP NHẬT tbl_order SET transactionId = "xyz" WHERE OrderID =;

là cố ý

+0

Shot trong bóng tối: là dấu chấm phẩy sau 'rollback 'kết thúc sớm xử lý thoát? – sarnold

+0

nope .. nó không giúp – robert

+0

vì vậy dù sao tôi đã đi trước và đã làm nó với mã thay vì sử dụng truy vấn mysql để xử lý lỗi. Giả sử một kết nối mở MySqlCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.Transaction = conn.BeginTransaction(); thử { cmd.CommandText = strSQL; cmd.ExecuteNonQuery(); cmd.Transaction.Commit(); } bắt (Ngoại lệ) { cmd.Transaction.Rollback(); dbLog.ErrorFormat ("*** Giao dịch Rollback: {0} \ n Params: {1} \ n Ví dụ: {2} \ n", strSQL, ex.InnerException); } – robert

Trả lời

0

Tôi tin xử lý thoát chỉ có thể được sử dụng trong thủ tục lưu trữ. Các tài liệu không nói rõ điều này, nhưng ám chỉ

Điều kiện có thể phát sinh trong quá trình thực chương trình lưu trữ đòi hỏi xử lý đặc biệt

http://dev.mysql.com/doc/refman/5.1/en/condition-handling.html