zoukankan      html  css  js  c++  java
  • 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命名空间的分布式事务)。

  • 相关阅读:
    学习JavaDay07
    学习JavaDay05
    学习JavaDay0402
    学习JavaDay04
    学习JavaDay03
    学习JavaDay02
    学习JavaDay01
    数据库的增删改查
    关于Spring
    关于多线程Thread的简单应用
  • 原文地址:https://www.cnblogs.com/hanzhaoxin/p/3751479.html
Copyright © 2011-2022 走看看