zoukankan      html  css  js  c++  java
  • 关于在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()方法的使用注意

    =============================================================================
      文章结束,如有问题请留言,感谢!٩( 'ω' )و 
    =============================================================================
  • 相关阅读:
    导航守卫
    asnyc
    扩展运算符 ···
    模版字符串
    iterator迭代器
    箭头函数
    解构
    变量let const
    vueUI可视化
    python图像特征提取
  • 原文地址:https://www.cnblogs.com/miaolin/p/14506138.html
Copyright © 2011-2022 走看看