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

  • 相关阅读:
    MyEclipse2014安装插件的几种方式(适用于Eclipse或MyEclipse其他版本)
    淘淘商城 本地仓库配置和仓库jar包下载
    淘淘商城的第一天
    Oracle12c 性能优化攻略:攻略1-1:创建具有最优性能的数据库
    Eclipse开发环境配置
    Oracle12c 性能优化攻略:攻略目录表
    将日期或数据转换为char数据类型 TO_CHAR(x[[,c2],C3])
    根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
    【功能】返回数据类型、字节长度和在内部的存储位置.DUMP(w[,x[,y[,z]]])
    alter table的用法
  • 原文地址:https://www.cnblogs.com/dlxh/p/6798848.html
Copyright © 2011-2022 走看看