相关知识:

  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. 使用事务之后,只要有任何一个命令错误,则另个命令都不会对数据库造成影响

ADO.NET笔记——执行事务的更多相关文章

  1. 事务处理笔记《一》ADO.NET级别的事务

    现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的C#开发者,我们已经熟知编写数据库交互程序的一些要点,即: (1)使用SqlConnection类的对象的Open()方法建立与数据库服 ...

  2. WCF学习笔记之事务编程

    WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...

  3. ADO.NET系列之事务和调用存储过程

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 前几篇我们介绍了Conne ...

  4. Spring笔记:事务管理

    Spring笔记:事务管理 事务管理 Spring事务管理是通过SpringAOP去实现的.默认情况下Spring在执行方法抛出异常后,引发事务回顾,当然你可以用拦截器或者配置去改变它们. 这部门内容 ...

  5. SqlServer批量刷数据执行事务回滚语句备份

    企业进行对数据库执行刷数据工作,一段很长的语句希望同时成功或者失败时用到. 1.建立测试环境 /**************************************************** ...

  6. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  7. Redis学习笔记(7)-事务

    package cn.com; import java.util.List; import redis.clients.jedis.Jedis; import redis.clients.jedis. ...

  8. 读书笔记 SQL 事务理解

    事务的ACID属性 Atomicity 原子性 每个事务作为原子单元工作(即不可以再拆分),也就是说所有数据库变动事务,要么成功要么不成功. SQL Server把每个DML或者 DDL命令都当做一个 ...

  9. Redis笔记3-redis事务

    Redis的事务机制允许同时执行多条指令,它是原子性操作,事务中的命令要么全部执行,要么全部不执行,另外,事务中的所有指令都会被序列化,而且其开始执行过程中,不回被即时过来的指令所打断,其需要经历三个 ...

随机推荐

  1. Lua读写文件

    文件读写 文件读写对制作游戏很有帮助.可以调用别的文件中的代码,保存最高分.游戏存档.玩家状态等信写到文件中. 首先,让我们看一个简单的命令:dofile.这个命令会读入另一个文件的代码并立即执行. ...

  2. hdu 1305 Immediate Decodability(字典树)

    Immediate Decodability Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  3. PHP Fuzzing行动——源码审计

    目录: Section 1: 20种PHP源码快速审计方式  Section 2: PHP源码审计自动化( PHP Fuzzer )  风险级别: ■ Low ■ Medium ■ High   在开 ...

  4. Java再学习——关于ConcurrentHashMap

    ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制. 1,在并发方面, ConcurrentHashMap提供了好得多的并发性.多个读操作几 ...

  5. LeetCode30 Substring with Concatenation of All Words

    题目: You are given a string, s, and a list of words, words, that are all of the same length. Find all ...

  6. 在Firefox中通过AJAX跨域访问Web资源---

    一.解决在firefox中无法跨域访问的问题 AJAX从本质上讲就是命名用XMLHttpRequest组件来向服务端发送HTTP请求,请接收相应信息.至于成功接收到响应信息后的操作,就和普通的Web客 ...

  7. VMware系统运维(七)vCenter Inventory Server安装

    1.vCenter Inventory Server安装即vCenter 清单服务 2.下一步 3.接受协议,下一步 4.选择安装位置,下一步 5.设置域名,注意在安装之前一定要加域,嘻嘻. 6.设置 ...

  8. jQuery选择器之子元素过滤选择器Demo

    测试代码: 07-子元素过滤选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...

  9. JSON解析总结2

    使用json-lib-2.4-jdk15.jar JSON工具类: import java.util.List; import net.sf.json.JSONArray; import net.sf ...

  10. [wordpress]wp-api-jwt-auth 尝试添加运行在多站点中 need change

    Hi,Thank you this plugin,because i use this plugin on Wordpress one Network,so the request other api ...