ADO.NET 事务控制
- 在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务。若要执行事务,请执行下列操作:
- 1.调用Connection 对象的BeginTransaction 方法来标记事务的开始。
- 2.将Transaction 对象分配给要执行的Command的Transaction 属性。
- 3.执行所需的命令。
- 4.调用Transaction 对象的Commit 方法来完成事务,或调用Rollback 方法来取消事务。 当然ADO.NET事务处理有优点和缺点,运用起来看具体情况了。
- 优点: – 简单性 – 和数据据事务差不多的快 – 独立于数据库,不同数据库的专有代码被隐藏了
- 缺点: – 事务不能跨越多个数据库连接 – 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。
- 下边我们看一个例子,建立一个页面,同样简单,只需要一个按钮,然后编程:
- 1 using System;
- 2 using System.Data;
- 3 using System.Configuration;
- 4 using System.Collections;
- 5 using System.Web;
- 6 using System.Web.Security;
- 7 using System.Web.UI;
- 8 using System.Web.UI.WebControls;
- 9 using System.Web.UI.WebControls.WebParts;
- 10 using System.Web.UI.HtmlControls;
- 11 using System.Data.SqlClient;
- 12
- 13 namespace WebApplication1
- 14 {
- 15 public partial class AdoAction : System.Web.UI.Page
- 16 {
- 17 protected void Page_Load( object sender, EventArgs e)
- 18 {
- 19
- 20 }
- 21
- 22 protected void btn_Click( object sender, EventArgs e)
- 23 {
- 24 SqlConnection con = new SqlConnection();
- 25 con.ConnectionString = ConfigurationManager.ConnectionStrings[ " DSN " ].ConnectionString;
- 26 con.Open();
- 27 // 启动一个事务。
- 28 SqlTransaction myTran = con.BeginTransaction();
- 29 // 为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。
- 30 // 第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。
- 31 SqlCommand myCom = new SqlCommand();
- 32 myCom.Connection = con;
- 33 myCom.Transaction = myTran;
- 34 try
- 35 {
- 36 myCom.CommandText = " insert into SqlAction values ('测试2','111') " ;
- 37 myCom.ExecuteNonQuery();
- 38 myCom.CommandText = " insert into SqlAction values ('测试3','111') " ;
- 39 myCom.ExecuteNonQuery();
- 40 myTran.Commit();
- 41 Response.Write( " 成功执行 " );
- 42
- 43 }
- 44 catch (Exception Ex)
- 45 {
- 46 myTran.Rollback();
- 47 // 创建并且返回异常的错误信息
- 48 Response.Write(Ex.ToString());
- 49 Response.Write( " 写入数据库失败 " );
- 50 }
- 51 finally
- 52 {
- 53 con.Close();
- 54 }
ADO.NET 事务控制的更多相关文章
- ActiveX数据对象之事务控制在VB和DELPHI中的应用
本文发表在中国人民解放军"信息工程大学"学报 2001年第3期. ActiveX数据对象之事务控制在VB和DELPHI中的应用 ...
- spring入门(三)【事务控制】
在开发中需要操作数据库,进行增.删.改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要 ...
- PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制之 第二部分
第二部分 尝试解决BulkWrite(List<WriteModel<T>>)问题 在上次发表的文章中,得到了一些很好的反馈,真切体会到写博文的好处,有高人指出两大问题,具体可 ...
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制
第一部分 基本设计 目前最新版本的C#驱动MongoDB-CSharpDriver-2.2.3,比之前的版本更新比较大,在网上很难找到这个版本的相关C#操作资料,以下都是个人自发研究.测试的,如有雷同 ...
- lightning mdb 源代码分析(5)-事务控制
本博文系列前面已经探讨了LMDB的系统架构.MMAP映射.B-Tree操作等部分,本文将尝试描述LMDB中的事务控制的实现. 事务的基本特征: 事务是恢复和并发控制的基本单位.它是一个操作序列,这些操 ...
- oracle-SQL语言基础-事务控制命令命令
事务控制命令命令 COMMITROLLBACKSAVEPOINTSET TRANSACTION 当第一条可执行的SQL语句开始执行,数据库事务就开始.随着下面任一事件发生,数据库事务结束:执行COMM ...
- DATASNAP多表提交之事务控制之通用方法
ERP系统的单据,总是些主从表结构,有一个主表,N个子表,子表又有子表,形成N层,单据数据提交时,主从表数据都要提交,为了保证数据的完整性,必须提供事务控制,要么都提交成功,有一个提交失败所有的提交都 ...
- Java实战之03Spring-05Spring中的事务控制(基于AOP)
五.Spring中的事务控制(基于AOP) 1.Spring中事务有关的接口 1.1.明确: JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案 1. ...
随机推荐
- python中使用openpyxl模块时报错: File is not a zip file
python中使用openpyxl模块时报错: File is not a zip file. 最大的原因就是不是真正的 xlsx文件, 如果是通过 库xlwt 新建的文件,或者是通过自己修改后缀名 ...
- 图解Java设计模式之模板模式
图解Java设计模式之模板模式 豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式 ...
- vue 3
目录 复习 Vue项目需要自建服务器:node npm:包管理器 - 为node拓展功能的 vue cli环境:脚手架 - 命令行快速创建项目 创建Vue项目 启动项目 项目目录 组件 在根组件中渲染 ...
- Python模块---Wordcloud生成词云图
wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前 ...
- linux-manjaro下添加Yahei Hybrid Consola字体
1.下载地址 http://www.win10zhijia.net/soft/20160921/3217.html 2.解压 unzip xxx 3.安装 sudo mkdir /usr/share/ ...
- [算法总结] 动态规划 (Dynamic Programming)
本文组织结构如下: 前言 最长公共子序列(LCS) 最长不下降子序列(LIS) 最大连续子序列之和 最长回文子串 数塔问题 背包问题(Knapsack-Problem) 矩阵链相乘 总结 前言 在学过 ...
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇
本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与美化, ...
- 根据银行卡号 获取银行名称及银行logo
根据银行卡号码获取银行卡归属地信息接口地址: https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8 ...
- Python机器学习笔记 集成学习总结
集成学习(Ensemble learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...
- Python Count函数的应用
Python Count函数的应用 通过LeetCode Origin:https://leetcode-cn.com/problems/robot-return-to-origin/ 学会了Pyth ...