我一直在將放入SQL命令語句中,並注意到它不會回滾更新,插入等在我的C#SqlCommand
上出錯。取自this的帖子。 MSDN指出:SQL錯誤不回滾整個SqlCommand
當SET XACT_ABORT爲ON時,如果Transact-SQL語句引發運行時錯誤,則整個事務終止並回滾。
我的SQL查詢的一般格式爲:
set xact_abort on
INSERT INTO Table1
UPDATE Table2
UPDATE Table3
UPDATE Table4
--Finally
SELECT someValue
我注意到,在錯誤沒有被捲起我的SQL命令回來。特定的錯誤是這種情況是一個參數的數據長度超過了列指定的長度。我正在使用SqlCommand
和SqlParameter
來創建SQL查詢。
我不想處理SQL中的異常,但任何錯誤都不會對數據庫進行任何更改是非常重要的。
通常的錯誤包括:列不存在,錯誤的數據類型,數據將被截斷,由於長度等
我應該使用比其他的東西嗎?提前致謝!
爲什麼不在你的C#中捕捉'SqlException'並手動回滾事務? – Andrew
據底部[此鏈接](https://msdn.microsoft.com/en-us/library/ms188792.aspx),你仍然需要包裝的聲明中呼籲'BeginTransaction'和'EndTransaction'。似乎它只是節省了你不得不對錯誤做出反應並自己調用'Rollback'。 – DonBoitnott
如果您正在運行多個腳本,另一種管理方式是[dbup](http://dbup.github.io)。 – lloyd