【读书笔记】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
【读书笔记】C#高级编程 第二十五章 事务处理的更多相关文章
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- 【读书笔记】C#高级编程 第二十二章 安全性
(一)身份验证和授权 安全性的两个基本支柱是身份验证和授权.身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特性资源之后进行的. 1.标识和Principal 使用标识可以验证运行应用程序 ...
- 【读书笔记】C#高级编程 第二十四章 文件和注册表操作
(一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByR ...
- 【读书笔记】C#高级编程 第十五章 反射
(一)在运行期间处理和检查代码 自定义特性允许把自定义元数据与程序元素关联起来.反射是一个普通术语,它描述了在运行过程中检查和处理程序元素的功能.例如,反射允许完成的任务: 枚举类型的成员 实例化新对 ...
- R in action读书笔记(20)第十五章 处理缺失数据的高级方法
处理缺失数据的高级方法 15.1 处理缺失值的步骤 一个完整的处理方法通常包含以下几个步骤: (1) 识别缺失数据: (2) 检查导致数据缺失的原因: (3) 删除包含缺失值的实例或用合理的数值代替( ...
- C#高级编程 第十五章 反射
(二)自定义特性 使自定义特性非常强大的因素时使用反射,代码可以读取这些元数据,使用它们在运行期间作出决策. 1.编写自定义特性 定义一个FieldName特性: [AttributeUsage(At ...
- 读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3
Node类型的变化 访问元素的样式 myDiv.style.backgroundColor = "red" myDiv.style.width = "100px& ...
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- “全栈2019”Java多线程第二十五章:生产者与消费者线程详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- Docker 与 K8S学习笔记(二十四)—— 工作负载的使用
我们前面讲了很多关于Pod的使用,但是在实际应用中,我们不会去直接创建Pod,我们一般通过Kubernetes提供的工作负载(Deployment.DeamonSet.StatefulSet.Job等 ...
- zabbix-5.0自动发现
1. 安装zabbix5.0 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.no ...
- RPA应用场景-银行回单查询
场景概述银行回单查询 所涉系统名称银行网银 人工操作(时间/次) 5 分钟 所涉人工数量 4 操作频率不定时 场景流程 1.收到外派业务员申请查询收入银行回单的邮件: 2.依据邮件中提供的客户信息进入 ...
- 用python制作文件搜索工具,深挖电脑里的【学习大全】
咳咳~懂得都懂啊 点击此处找管理员小姐姐领取正经资料~ 开发环境 解释器: Python 3.8.8 | Anaconda, Inc. 编辑器: pycharm 专业版 先演示效果 开始代码,先导入模 ...
- 写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!
写了个 Markdown 命令行小工具,希望能提高园友们发文的效率! 前言 笔者使用 Typora 来编写 Markdown 格式的博文,图片采用的是本地相对路径存储(太懒了不想折腾图床). 时间久了 ...
- Tapdata 实时数据融合平台解决方案(二):理解数据中台
作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 数据中台定义: 以打通部门或数据孤岛的统 ...
- LEACH分簇算法实现和能量控制算法实现
一.前言 1.在给定WSN的节点数目(100)前提下,节点随机分布,按照LEACH算法,实现每一轮对WSN的分簇.记录前K轮(k=10)时,网络的分簇情况,即每个节点的角色(簇头或簇成员).标记节点之 ...
- DBPack 读写分离功能发布公告
在 v0.1.0 版本我们发布了分布式事务功能,并提供了读写分离功能预览.在 v0.2.0 这个版本,我们加入了通过 UseDB hint 自定义查询请求路由的功能,并修复了一些 bug.另外,在这个 ...
- SpringBoot接口 - API接口有哪些不安全的因素?如何对接口进行签名?
在以SpringBoot开发后台API接口时,会存在哪些接口不安全的因素呢?通常如何去解决的呢?本文主要介绍API接口有不安全的因素以及常见的保证接口安全的方式,重点实践如何对接口进行签名.@pdai ...
- Solution -「Local 11145」诗意狗
0x01 前置芝士 树形结构?贪心?思维?眼睛? 好有趣... link 0x02 题目大意:给你一颗有 \(n\) 个节点的树,你需要尽可能多的删掉边,使得剩下的图中有 \(k\) 个点满足互相能走 ...