• ADO.NET事务


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

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

    下面通过一个示例演示:

    在MySql中建立如下表:

    image

    插入数据如下:

    image

    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命名空间的分布式事务)。

  • 相关阅读:
    linux 中rz sz 文件传输
    linux find 命令
    深度学习的博客
    cifar10数据的转换、代码解释
    gflags的使用实例(转载)
    leveldb使用 (转载)
    (转载+整理)Leveldb安装及例子
    2013-09-25-【随笔】-Roy
    2013-09-22 [随笔]-Roy
    2013-08-12【随笔2】-Roy
  • 原文地址:https://www.cnblogs.com/hanzhaoxin/p/3751479.html
Copyright © 2020-2023  润新知