关于在C#中使用(MSSQL)SqlCommand.ExecuteNonQuery()执行多条SQL拼接的语句时,遇到错误时是否会全部回滚的笔记

在开发过程中,总是遇到一次需要执行多条SQL语句的情况,经常我们会直接把SQL语句拼接在一起,直接一次执行。

但是,在使用SqlCommand.ExecuteNonQuery()经常不注意,它并不会在执行遇到错误时全部回滚

 1 --创建一个成员表
 2 CREATE TABLE member
 3 (
 4     id INT NOT NULL IDENTITY(1,1),
 5     [name] NVARCHAR(20) NULL,
 6     age INT NULL,
 7     remark NVARCHAR(200) NULL,
 8 )
 9 go
10 
11 -- 将一下3条语句一起执行
12 INSERT INTO dbo.member(name, age, remark)VALUES(N'张三', 21, N'备注1'); --单独执行,会正确
13 INSERT INTO dbo.member(name, age, remark)VALUES(N'李四', 'x', N'备注2'); --可以看到这条语句中的年龄是错误的数据类型,单独执行,会失败
14 INSERT INTO dbo.member(name, age, remark)VALUES(N'王五', 23, N'备注3');--单独执行,会正确
15 GO
16 
17 -- 查询成员表
18 SELECT * FROM dbo.member

先创建表,然后将3条语句一起执行。结果如下:

包含错误语句的执行结果。

可以看到,第一条执行成功了;第二条报错了,数据类型不正确;第三条没有执行。

表中的数据如下:

表中的数据

 可以看到,只有一条数据。

而在C#中使用SqlCommand.ExecuteNonQuery()一次性执行以上3条插入语句的结果是一致的。

总结:

  在C#中使用SqlCommand.ExecuteNonQuery()一次性执行多条SQL语句时,注意使用事务处理。

  1、在遇到错误时,不会回滚。

  2、在遇到错误时,会终止执行之后的SQL语句。

以上结论经过C#程序中测试得出的结果!

参考:SqlCommand.ExecuteNonQuery()方法的使用注意

=============================================================================
  文章结束,如有问题请留言,感谢!٩( 'ω' )و 
=============================================================================
原文地址:https://www.cnblogs.com/miaolin/p/14506138.html