zoukankan      html  css  js  c++  java
  • 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. 使用事务之后,只要有任何一个命令错误,则另个命令都不会对数据库造成影响
  • 相关阅读:
    Vector3函数理解-计算两向量之间的角度
    Android报错Type Error executing aapt: Return code -1
    android中 onResume()方法什么时候执行 ??(转)
    自行实现Kinect 手势Demo踩的坑
    Kinect 2.0 默认姿势的中文意思
    C#限制float有两位小数
    Android View 从左边滑出动画 ,以及从左上,左下,右上,右下放大动画。
    注册谷歌账户时最后一步验证账户输入手机号说此电话号码无法用于进行验证,如何解决?
    Mac使用sonarqube进行代码检测
    Unable to find method 'org.gradle.api.tasks.TaskInputs.file
  • 原文地址:https://www.cnblogs.com/chenguangqiao/p/4355777.html
Copyright © 2011-2022 走看看