在发布System.Transaction命名空间之前,可以直接用ADO.NET创建事务,也可以通过组件、特性和COM+运行库(位于System.EnterpriseServices命名空间中)进行事务处理。本文如题所示,介绍在这些传统事务处理方式中较为简单的“ASP.NET事务”。

在传统的ADO.NET事务中,如果没有手动创建事务,每条SQL语句就都是一个事务。如果多条SQL语句应参与到同一个事务处理中,就必须手动创建一个事务。

下面通过一个示例演示:

在MySql中建立如下表:

插入数据如下:

ADO.NET事务测试代码:

using(MySqlConnection conn = new MySqlConnection(GetConnection()))

        {

            conn.Open();

            //启动一个事务

            using(MySqlTransaction transaction = conn.BeginTransaction())

            {

                using (MySqlCommand cmd = conn.CreateCommand())

                {

                    try

                    {

                        cmd.Transaction = transaction;  //为命令指定事务

                        cmd.CommandText = "INSERT INTO tb_user(UserId,UserName) VALUE('Id0009','Name0002');";

                        cmd.ExecuteNonQuery();

                        cmd.CommandText = "INSERT INTO tb_user(UserId,UserName) VALUE('Id0008','Name0003');";

                        cmd.ExecuteNonQuery();

                        transaction.Commit();   //事务提交

                        Response.Write("<script>alert('成功写入记录');</script>");

                    }

                    catch(Exception ex)

                    {

                        transaction.Rollback(); //事务回滚

                        Response.Write(ex.Message);

                        Response.Write("<script>alert('写入记录失败');</script>");

                    }

 

                }

            }

        }

代码分析:

如示例代码手动创建ADO.NET事务步骤如下:

1)使用MySqlConnection类的BeginTransaction()方法返回一个MySqlTransaction类型的对象;

2)使用MySqlCommand类对象的Transaction属性将要参与事务处理的每条命令关联到上一不返回的MySqlTransaction类型的对象上;

3)如果事务可以成功完成,使用MySqlTransaction对象的Commit()方法提交事务处理结果;

4)如果事务处理中发生错误,就调用MySqlTransaction对象的Rollback()方法,撤销每一个修改。


ADO.NET事务的缺点;

ADO.NET事务只能处理关联到一个连接上的本地事务,不支持跨多个连接的事务。(为了克服这一缺点,下一节将介绍基于System.Transaction命名空间的分布式事务)。

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

  1. SQL Server 2008 R2——VC++ ADO 操作 事务

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. ADO.NET事务封装

    在数据库工具类编写的过程中,对事务的处理操作想避免各个原子操作的事务对象赋值重复操作,想对外暴露的方法为如下形式 public bool ExecuteTransition(Action Transi ...

  3. ADO.NET 事务控制

    在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务.若要执行事务,请执行下列操作: 1.调用Connection 对象的BeginTransaction 方法 ...

  4. ADO执行事务

    在工作中遇到,需要批量提交的.在sql2008以后有表变量定义,可以实现.但个人比较习惯用C#,就有下面代码,直接上代码... using (SqlConnection conn = new SqlC ...

  5. ADO 事务

    Ado.Net事务处理.在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务.若要执行事务,请执行下列操作:• 调用Connection 对象的BeginTra ...

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

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

  7. ado.net中事务的使用

    ADO.Net中也提供了事务处理功能,通过ADO.net事务,可以将多个任务绑定在一起,如果所有的任务成功,就提交事务,如果有一个任务失败,就讲滚回事务 执行ADO.Net事务包含四个步骤,接下来以S ...

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

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

  9. LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

    它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...

随机推荐

  1. Lanczos Algorithm and it's Parallelization Stragegy

    由于写了降维的一个系列算法分析,本来以为对这个Lanczos算法会理解一点,但是还是不知道讲了什么,最多的就是会如何调用,然后出结果,所以就翻译官网的相关内容.本篇翻译来自Dimensional Re ...

  2. Max SPA

    Stingray Response_ContentType Stingray javascript 其实是支持返回原生html的, 有了这个事情就简单了 RHTML - Response_Conten ...

  3. 关于Storm 中Topology的并发度的理解

    来自:https://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html htt ...

  4. MongoDB numa系列问题二:WARNING: You are running on a NUMA machine.

    1:Mongod日志warning: mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest launching m ...

  5. 取代Ant——Maven简介

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6625724.html  一:目前开发存在的问题 在没有Maven之前,我们开发一个项目,需要自行导入各种不同的 ...

  6. jqGrid遍历所有行及获取某一行数据

    $("#gridTable").find("tbody tr").not(".jqgfirstrow").each(function (i) ...

  7. EF Code First导航属性一对一关系中注意点及配置方法

    //学生 public class Student { [key] public int StId { get; set; } public int SocialSecurityNumber { ge ...

  8. 获取公钥证书的DN(Distinguished Name)

    DN --  Distinguished Name,证书持有人的唯一标识符. 可以通过下面的openssl命令来打印出证书的DN. openssl x509 -subject -nameopt RFC ...

  9. Linux内核中的软中断、tasklet和工作队列具体解释

    [TOC] 本文基于Linux2.6.32内核版本号. 引言 软中断.tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的"下半部"(bottom ...

  10. Linux下几款C++程序中的内存泄露检查工具

    https://blog.csdn.net/gatieme/article/details/51959654