zoukankan      html  css  js  c++  java
  • 【读书笔记】C#高级编程 第二十五章 事务处理

    (一)简介

    事务的主要特征是,任务要么全部完成,要么都不完成。

    (二)概述

    事务由事务管理器来管理和协调。每个影响事务结果的资源都由一个资源管理器来管理。事务管理器与资源管理器通信,以定义事务的结果。

    1、事务处理阶段

    激活阶段:在这个阶段创建事务。

    准备阶段:在这个阶段,每个资源管理器都可以定义事务的结果。

    提交阶段:当所有的资源管理器都成功准备好了,就开始这个阶段。

    2、ACID属性

    事务的特征可以用术语ACID来定义:

    Atomicity(原子性):表示一个工作单元。

    Consistency(一致性):事务开始前的装态和事务完成后的状态必须有效。

    Isolation(隔离性):表示并发进行的事务独立于状态,而状态在事务处理过程中可能发生变化。

    Durability(持久性):在事务完成后,它必须以可持久的方式存储起来。

    Ps:并不是每个事务都需要这4个属性(例:内存的事务不需要持久性)。

    (三)传统的事务

    1、ADO.NET事务

    public async Task AddCourseAsync(string connectionStr, string sql)
    
    {
    
        var connection = new SqlConnection(connectionStr);
    
        SqlCommand courseCommand = connection.CreateCommand();
    
        courseCommand.CommandText = sql;
    
        await connection.OpenAsync();
    
        SqlTransaction tx = connection.BeginTransaction();
    
        try
    
        {
    
            courseCommand.Transaction = tx;
    
            await courseCommand.ExecuteNonQueryAsync();
    
            tx.Commit();
    
        }
    
        catch (Exception ex)
    
        {
    
            Console.WriteLine("Error:" + ex.Message);
    
            tx.Rollback();
    
            throw;
    
        }
    
        finally
    
        {
    
            connection.Close();
    
        }
    
    }

    2、System.EnterpriseServices

    通过System.EnterpriseServices使用事务的优点是,不需要显式地进行事务处理,运行库会自动创建事务,只需要给有事务处理要求的类添加[Transaction]特性即可。[AutoComplete]特性把方法标记为自动设置事务的状态位:如果该方法成功,就设置成功位,因此可以提交事务。如果发生异常,就终止事务。

    [Transaction(TransactionOption.Required)]
    
    public class CourseData: ServicedComponent
    
    {
    
        [AutoComplete]
    
        public async Task AddCourseAsync(string connectionStr, string sql)
    
        {
    
            var connection = new SqlConnection(connectionStr);
    
            SqlCommand courseCommand = connection.CreateCommand();
    
            courseCommand.CommandText = sql;
    
            connection.Open();
    
            try
    
            {
    
                courseCommand.ExecuteNonQuery();
    
            }
    
            finally
    
            {
    
                connection.Close();
    
            }
    
        }
    
    }

    System.EnterpriseServices创建事务的一大优点是,多个对象能轻松地运行在同一个事务中,事务还可以自动登记。缺点是它需要COM+主机模型,使用这个技术的类必须派生自基类ServicedComponent。

    事务参考:http://www.cnblogs.com/leslies2/archive/2012/01/05/2289106.html

  • 相关阅读:
    [jQuery]无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
    < meta > 元素(转)
    认识圣杯布局和双飞翼布局(转)
    条件注释判断浏览器版本<!--[if lt IE 9]>(转载)
    Kubernetes日志采集Sidecar模式介绍
    filebeat常见配置项梳理
    debin 安装容器安装工具 ​apt-get install telnet
    python-study-账号登录验证
    老板的三个忠告
    有趣的程序
  • 原文地址:https://www.cnblogs.com/dlxh/p/6798848.html
Copyright © 2011-2022 走看看