1. 在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务。若要执行事务,请执行下列操作:
  2. 1.调用Connection 对象的BeginTransaction 方法来标记事务的开始。
  3. 2.将Transaction 对象分配给要执行的Command的Transaction 属性。
  4. 3.执行所需的命令。
  5. 4.调用Transaction 对象的Commit 方法来完成事务,或调用Rollback 方法来取消事务。 当然ADO.NET事务处理有优点和缺点,运用起来看具体情况了。
  6. 优点: – 简单性 – 和数据据事务差不多的快 – 独立于数据库,不同数据库的专有代码被隐藏了
  7. 缺点: – 事务不能跨越多个数据库连接 – 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。
  8. 下边我们看一个例子,建立一个页面,同样简单,只需要一个按钮,然后编程:
  9. 1 using System;
  10. 2 using System.Data;
  11. 3 using System.Configuration;
  12. 4 using System.Collections;
  13. 5 using System.Web;
  14. 6 using System.Web.Security;
  15. 7 using System.Web.UI;
  16. 8 using System.Web.UI.WebControls;
  17. 9 using System.Web.UI.WebControls.WebParts;
  18. 10 using System.Web.UI.HtmlControls;
  19. 11 using System.Data.SqlClient;
  20. 12
  21. 13 namespace WebApplication1
  22. 14 {
  23. 15 public partial class AdoAction : System.Web.UI.Page
  24. 16 {
  25. 17 protected void Page_Load( object sender, EventArgs e)
  26. 18 {
  27. 19
  28. 20 }
  29. 21
  30. 22 protected void btn_Click( object sender, EventArgs e)
  31. 23 {
  32. 24 SqlConnection con = new SqlConnection();
  33. 25 con.ConnectionString = ConfigurationManager.ConnectionStrings[ " DSN " ].ConnectionString;
  34. 26 con.Open();
  35. 27 // 启动一个事务。
  36. 28 SqlTransaction myTran = con.BeginTransaction();
  37. 29 // 为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。
  38. 30 // 第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。
  39. 31 SqlCommand myCom = new SqlCommand();
  40. 32 myCom.Connection = con;
  41. 33 myCom.Transaction = myTran;
  42. 34 try
  43. 35 {
  44. 36 myCom.CommandText = " insert into SqlAction values ('测试2','111') " ;
  45. 37 myCom.ExecuteNonQuery();
  46. 38 myCom.CommandText = " insert into SqlAction values ('测试3','111') " ;
  47. 39 myCom.ExecuteNonQuery();
  48. 40 myTran.Commit();
  49. 41 Response.Write( " 成功执行 " );
  50. 42
  51. 43 }
  52. 44 catch (Exception Ex)
  53. 45 {
  54. 46 myTran.Rollback();
  55. 47 // 创建并且返回异常的错误信息
  56. 48 Response.Write(Ex.ToString());
  57. 49 Response.Write( " 写入数据库失败 " );
  58. 50 }
  59. 51 finally
  60. 52 {
  61. 53 con.Close();
  62. 54 }

ADO.NET 事务控制的更多相关文章

  1. ActiveX数据对象之事务控制在VB和DELPHI中的应用

            本文发表在中国人民解放军"信息工程大学"学报 2001年第3期.        ActiveX数据对象之事务控制在VB和DELPHI中的应用             ...

  2. spring入门(三)【事务控制】

    在开发中需要操作数据库,进行增.删.改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要 ...

  3. PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)

    1.和mysql扩展库的区别: (1   安全性.稳定性更高 (2  提供了面向对象和面向过程两种风格 2.php.ini  中的  extension=php_mysqli.dll 解除封印 3.面 ...

  4. 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制之 第二部分

    第二部分 尝试解决BulkWrite(List<WriteModel<T>>)问题 在上次发表的文章中,得到了一些很好的反馈,真切体会到写博文的好处,有高人指出两大问题,具体可 ...

  5. 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制

    第一部分 基本设计 目前最新版本的C#驱动MongoDB-CSharpDriver-2.2.3,比之前的版本更新比较大,在网上很难找到这个版本的相关C#操作资料,以下都是个人自发研究.测试的,如有雷同 ...

  6. lightning mdb 源代码分析(5)-事务控制

    本博文系列前面已经探讨了LMDB的系统架构.MMAP映射.B-Tree操作等部分,本文将尝试描述LMDB中的事务控制的实现. 事务的基本特征: 事务是恢复和并发控制的基本单位.它是一个操作序列,这些操 ...

  7. oracle-SQL语言基础-事务控制命令命令

    事务控制命令命令 COMMITROLLBACKSAVEPOINTSET TRANSACTION 当第一条可执行的SQL语句开始执行,数据库事务就开始.随着下面任一事件发生,数据库事务结束:执行COMM ...

  8. DATASNAP多表提交之事务控制之通用方法

    ERP系统的单据,总是些主从表结构,有一个主表,N个子表,子表又有子表,形成N层,单据数据提交时,主从表数据都要提交,为了保证数据的完整性,必须提供事务控制,要么都提交成功,有一个提交失败所有的提交都 ...

  9. Java实战之03Spring-05Spring中的事务控制(基于AOP)

    五.Spring中的事务控制(基于AOP) 1.Spring中事务有关的接口 1.1.明确: JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案 1. ...

随机推荐

  1. 《Explaining and harnessing adversarial examples》 论文学习报告

    <Explaining and harnessing adversarial examples> 论文学习报告 组员:裴建新   赖妍菱    周子玉 2020-03-27 1 背景 Sz ...

  2. Java 入门学习知识点整理

    [JAVA一个文件写多个类 ( 同级类 ) 规则和注意点] 在一个.java文件中可以有多个同级类,  其修饰符只可以public/abstract/final/和无修饰符 public修饰的只能有一 ...

  3. ICLR 2020 | 抛开卷积,multi-head self-attention能够表达任何卷积操作

    近年来很多研究将nlp中的attention机制融入到视觉的研究中,得到很不错的结果,于是,论文侧重于从理论和实验去验证self-attention可以代替卷积网络独立进行类似卷积的操作,给self- ...

  4. win10 Redis闪退问题

    问题:双击redis-server.exe,闪退 解决办法:win+R,输入cmd进入命令行模式,接着cd进入Redis安装根目录,再输入:redis-server.exe redis.windows ...

  5. 切比雪夫低副瓣阵列设计 MATLAB

    相控阵天线中,直线阵列作为重要的一种,有着极为广泛的应用.切比雪夫低副瓣阵列设计是一种典型的设计方法. 切比雪夫方法主要是实现低副瓣.窄波束: 其产生的核心如下: 我的理解:因为能量守恒,所有副瓣都一 ...

  6. mysqlbinlog错误:Error in Log_event::read_log_event(): 'read error'

    环境: mysql 5.6 ; binlog  3.4 ; binlog_format MIXED ; .报错: mysqlbinlog -v --start-position=166084123 m ...

  7. iOS URL schemes

    来源:知乎 launch center pro支持的参数主要有两个,[prompt]文本输入框和[clipboard]剪贴板 淘宝宝贝搜索 taobao://http://s.taobao.com/? ...

  8. OpenCV-Python 使用OCR手写数据集运行KNN | 五十四

    目标 在本章中 我们将使用我们在kNN上的知识来构建基本的OCR应用程序. 我们将尝试使用OpenCV自带的数字和字母数据集. 手写数字的OCR 我们的目标是构建一个可以读取手写数字的应用程序.为此, ...

  9. 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI

    这是一只AI生出的小AI. 谷歌大脑的Quoc Le团队,用神经网络架构搜索 (NAS) ,发现了一个目标检测模型.长这样: △ 看不清请把手机横过来 它的准确率和速度都超过了大前辈Mask-RCNN ...

  10. RMQ(倍增法求ST)

    解决什么问题:区间查询最值 倍增思想:每次得出结果的范围呈2的幂次增长,有人说相当于二分,目前我觉得相当于线段树的查找. 具体理解看代码: /*倍增法求ST*/ #include<math.h& ...