開發人員在努力做到妥善地處理意外,這樣用戶就不用擔心天書般的系統錯誤信息。出於這個原因,異常處理是每個.NET應用程序的一個標准部分。Try/catch塊讓你能夠捕捉異常並從該點控制應用程序的執行。與數據庫進行交互操作的時候會發生很多錯誤,但是很多開發人員都不知道如何處理數據庫層的錯誤。本文我們將探討如何利用SQLServer和T-SQL來處理你數據庫代碼裡的錯誤。
處理T-SQL裡的錯誤
SQLServer的SQL對話讓你能夠輕松地處理可能會在存儲進程、函數裡發生的非致命錯誤,但是並不是所有的錯誤都很容易處理。事實上,致命和非致命的錯誤有很多。什麼是致命的,什麼是非致命的,對此沒有很完備的文檔說明,但是你的應用程序代碼總是可以利用try/catch塊來處理致命的數據庫錯誤。對於其他所有的錯誤,你可以使用下面的技術。
事務
你應該在數據庫代碼裡使用事務,以確保在一切都沒有問題的時候所有的更改都被完成。SQLServer的在線幫助將事務描述為任務的一個邏輯單元,它由一系列語句(選擇、插入、更新,或者刪除等)組成。如果在事務期間沒有發生任何錯誤,那麼對事務的所有改動都會成為數據庫的永久部分。如果在這期間發生了錯誤,不會對數據庫進行任何修改。
事務包含在BEGIN TRANSACTION和END TRANSACTION語句之間。ROLLBACK TRANSACTION語句可以取消所有的更改,因此不會發生任何變化。用COMMIT TRANSACTION語句可以進行永久的更改。現在,就讓我們把注意力放在如何處理T-SQL裡的錯誤上。
@@Error
@@Error函數讓你可以實現T-SQL錯誤處理。它會返回由系統所返回的錯誤代碼。如果沒有錯誤發生就會返回“0”。@@Error函數必須緊接在一個語句之後立即被調用,因為它會在每個T-SQL語句之後被清除。