首页 > 编程 > .NET > 正文

ADO.NET笔记——执行事务

2024-07-21 02:47:34
字体:
来源:转载
供稿:网友
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. 使用事务之后,只要有任何一个命令错误,则另个命令都不会对数据库造成影响


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表