你的位置:首页 > 数据库

[数据库]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 ConsoleApplication1310 {11   class Program12   {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       try35       {36         cmd1.ExecuteNonQuery();37         cmd2.ExecuteNonQuery();38       }39       catch (Exception e)40       {41         Console.WriteLine("执行失败。");42         Console.WriteLine(e);43       }44       finally45       {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       try60       {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       finally74       {75         conn.Close();76       }77     }78   }79 }

 

程序分析:

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