ADO.NET笔记——执行事务

相关知识:

  1. 处于同一事务(Transaction)内的一组操作,要么都成功执行,最后完全提交;但如果只要有任何一个操作失败或者出问题,所有值钱执行的操作也都取消并恢复到初始状态(即回滚)
  2. SqlTransacttion代表从ADO.NET中发出的事务

 

代码示例:

 1 using System;

 2 using System.Collections.Generic;

 3 using System.Linq;

 4 using System.Text;

 5 using System.Threading.Tasks;

 6 using System.Data;

 7 using System.Data.SqlClient;

 8 

 9 namespace ConsoleApplication13

10 {

11     class Program

12     {

13         static string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root";

14         static SqlConnection conn = new SqlConnection(strConn);

15 

16         static string sql1 = "INSERT INTO Account(AccountID,AccountName,password) VALUES"

17             + "(100,'sql1','123456')";//此命令正确

18         static string sql2 = "INSERT INTO Account(AccountID,AccountName1,password) VALUES"

19             + "(100,'sql2','123456')";//此命令因有拼写错误将会失败

20 

21         static SqlCommand cmd1 = new SqlCommand(sql1, conn);

22         static SqlCommand cmd2 = new SqlCommand(sql2, conn);

23 

24         static void Main(string[] args)

25         {

26             //OperationWithoutTransaction();

27             OperationWithTransaction();

28         }

29 

30         static void OperationWithoutTransaction()

31         {

32             conn.Open();

33 

34             try

35             {

36                 cmd1.ExecuteNonQuery();

37                 cmd2.ExecuteNonQuery();

38             }

39             catch (Exception e)

40             {

41                 Console.WriteLine("执行失败。");

42                 Console.WriteLine(e);

43             }

44             finally

45             {

46                 conn.Close();

47             }

48         }

49 

50         static void OperationWithTransaction()

51         {

52             conn.Open();

53             //连接打开后,才能启动事务

54             SqlTransaction trans = conn.BeginTransaction();

55             //将两个操作添加到同一个事务中

56             cmd1.Transaction = trans;

57             cmd2.Transaction = trans;

58 

59             try

60             {

61                 cmd1.ExecuteNonQuery();

62                 cmd2.ExecuteNonQuery();

63                 //如果没有出现异常,则提交事务

64                 trans.Commit();

65             }

66             catch (Exception e)

67             {

68                 Console.WriteLine("执行失败,事务回滚。");

69                 Console.WriteLine(e);

70                 //执行回滚

71                 trans.Rollback();

72             }

73             finally

74             {

75                 conn.Close();

76             }

77         }

78     }

79 }

 

程序分析:

  1. 没有使用事务时,如果命令1执行正确,而命令2执行错误,则命令1的修改将成功保存到数据库中
  2. 使用事务之后,只要有任何一个命令错误,则另个命令都不会对数据库造成影响

 

你可能感兴趣的:(.net)