现在我们对事务的概念和原理都有所了解了,并且作为已经有一些基础的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 节。

事务处理笔记《一》ADO.NET级别的事务的更多相关文章

  1. Java学习笔记_ 数据库隔离级别和事务传播行为

    转自: https://blog.csdn.net/qq_38545713/article/details/79779265 一:数据库的事物隔离级别与传播行为总结:              很多人 ...

  2. ADO.NET中使用事务进行数据库读写的办法

    使用事务一般是进行数据写入,数据读取一般是不需要这货的 第一种办法: 使用存储过程: 顾名思义,在存储过程中定义好变量,定义好事务开始,结束,错误回滚然后在ADO.NET中正常调用存储过程的方法就行 ...

  3. SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务

    原文:SQL点滴9-SQL Server中的事务处理以及SSIS中的内建事务 我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理 ...

  4. MySQL 笔记整理(8.a) --事务到底是隔离还是不隔离的?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 8.a) --事务到底是隔离还是不隔离的? 这部分内容不太容易理解,笔者也是进行了多次阅读.因此引用原文: 之前有提到过,如果是在可 ...

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

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

  6. Hibernate学习笔记(三)—— Hibernate的事务控制

    Hibernate是对JDBC的轻量级封装,其主要功能是操作数据库.在操作数据库过程中,经常会遇到事务处理的问题,接下来就来介绍Hibernate中的事务管理. 在学习Hibernate中的事务处理之 ...

  7. 事务处理笔记《二》.Net框架下的事务处理技术

    术语:DTC(分布式事务协调器) .Net中实现事务的几种方法总结:一. 通过后台数据库的SQL语句实现事务,在台数据库端通过语句来实现转帐业务,如下: Set xact_abort on Begin ...

  8. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  9. 【概念原理】四种SQL事务隔离级别和事务ACID特性

    摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性.   事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...

随机推荐

  1. 转:http2的资料与使用

    https://imququ.com/post/http2-resource.html

  2. Jquery获取当前行的数据

    取表格当前行数据js代码: Java代码 $(function() { $(".myclass").each(function(){     var tmp=$(this).chi ...

  3. Python学习笔记(四)多进程的使用

    python中多进程与Linux 下的C基本相同.   fork的基本使用   先看最简单的例子: # coding: utf-8 import os def my_fork(): pid = os. ...

  4. Destroy reall destroy ?!

    最近做战斗逻辑的时候发现一个问题 测试脚本mTest: public class mTest : MonoBehaviour { public mTest2 tmp2; void OnGUI() { ...

  5. HDU 5094 --Maze【BFS &amp;&amp; 状态压缩】

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Sub ...

  6. ros下基于百度语音的,语音识别和语音合成

    代码地址如下:http://www.demodashi.com/demo/13153.html 概述: 本demo是ros下基于百度语音的,语音识别和语音合成,能够实现文字转语音,语音转文字的功能. ...

  7. MapReduce-MulitipleOutputs实现自己定义输出到多个文件夹

    输入源数据例子: Source1-0001 Source2-0002 Source1-0003 Source2-0004 Source1-0005 Source2-0006 Source3-0007 ...

  8. 用JWT技术为SpringBoot的API增加授权保护(转),需要自己实现userdetailservice接口

    转自:https://blog.csdn.net/haiyan_qi/article/details/77373900 概述 示例 https://github.com/qihaiyan/jwt-bo ...

  9. C++语言基础(16)-string类

    使用 string 类需要包含头文件<string>,下面的例子介绍了几种定义 string 变量(对象)的方法: #include <iostream> #include & ...

  10. Python内置函数之input()

    input([prompt])input()读取标准输入并打印字符串到屏幕. 参数是自定义的提示符. 例子: >>> input('$ ') $ pwd 'pwd'