我一直在将放入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