事务处理笔记《一》ADO.NET级别的事务
现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的C#开发者,我们已经熟知编写数据库交互程序的一些要点,即:
(1)使用SqlConnection类的对象的Open()方法建立与数据库服务器的连接。
(2)然后将该连接赋给SqlCommand对象的Connection属性。
(3)将欲执行的SQL语句赋给SqlCommand的CommandText属性。
(4)通过SqlCommand对象进行数据库操作。
创建一个ADO.NET事务是很简单的,需要定义一个SqlTransaction类型的对象。SqlConnection 和OleDbConnection对象都有一个BeginTransaction 方法,它可以返回 SqlTransaction 或者OleDbTransaction 对象。然后赋给SqlCommand对象的Transcation属性,即实现了二者的关联。为了使事务处理可以成功完成,必须调用SqlTransaction对象的Commit()方法。如果有错误,则必须调用Rollback()方法撤销所有的操作。
事务处理程序的要点:
(1)创建事务
(2)事务与要处理的每条命令关联起来
(3)事务的提交与回滚
基于以上认识,下面我们就开始动手写一个基于ADO.NET的事务处理程序。
string conString = "data source=127.0.0.1;database=codematic;user id=sa; password="; SqlConnection myConnection = new SqlConnection(conString); myConnection.Open(); //启动一个事务 SqlTransaction myTrans = myConnection.BeginTransaction(); //为事务创建一个命令 SqlCommand myCommand = new SqlCommand(); myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { myCommand.CommandText = "update P_Product set Name='电脑2' where Id=52"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "update P_Product set Name='电脑3' where Id=53"; myCommand.ExecuteNonQuery(); myTrans.Commit();//提交 Response.Write("两条数据更新成功"); } catch (Exception ex) { myTrans.Rollback();//遇到错误,回滚 Response.Write(ex.ToString()); } finally { myConnection.Close(); }
ADO.NET事务的优势和限制如下。
优势:
l 简单。
l 和数据库事务差不多快。
l 事务可以跨越多个数据库访问。
l 独立于数据库,不同数据库的专有代码被隐藏了。
限制:事务执行在数据库连接层上,所以需要在执行事务的过程中手动地维护一个连接。
注 意 |
所有命令都必须关联在同一个连接实例上,ADO.NET事务处理不支持跨多个连接的事务处理。 |
选自《亮剑.NET. .NET深入体验与实战精要》一书 5.4 节。
最新文章
- MFC编程入门之二十七(常用控件:图片控件PictureControl)
- tcpdf最新版 6.2版
- 使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL
- Hbase案例分析(二)
- 简单的新闻客户端APP开发(DCloud+thinkphp+scrapy)
- Android TextView属性
- unigui数据库连接池
- hdu1047 Integer Inquiry 多次大数相加
- *CCF 201612-2 工资计算(80)
- MyEclipse 显示行标
- matlab-常用函数(2)
- mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
- python进阶------进程线程(一)
- webstorm方向键与电脑快捷键冲突
- SVN关于忽略xcuserdata目录
- 增加AP INVOICE 行&;分配行
- MySQL 的索引优化
- Excel表列名称(给定一个正整数,返回它在 Excel 表中相对应的列名称。)
- P2659 美丽的序列
- @PathVariable获取带点参数,获取不全
热门文章
- 解决spring boot启动报错java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level
- 【CI】系列三.宿主机KVM配置及vdi与vmdk格式转换等
- ios app在itunesConnect里面的几种状态
- 使用Nginx+uWSGI+Django方法部署Django程序(上)
- hdu1863 畅通project(判定最小生成树)
- XPage的使用示范例子
- C语言-gdb调试工具详解
- popupwindow从底部弹出
- php的pear包管理
- Atitit.java swing打印功能 api  attilax总结