大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > ASP.NET技巧 > ADO.NET事务

ADO.NET事务

关键词:事务ADO.NET  阅读(685) 赞(13)

[摘要]本文是对ADO.NET事务的讲解,对学习ASP.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命名空间的分布式事务)。



相关评论