事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

对于初学者来说,从字面上难以理解什么是事务。下面我试着通过讲述事务的作用及特性来帮助您初步了解事务。

事务将多个数据库操作"合并"为一个;

事务开启后,可以通过GetObject方法来打开一个对象;

事务可以提交(commit),也可以回滚(abort);

事务也可以嵌套;

通过事务管理器启动和管理事务。

事务是将一系列操作作为一个单元执行,要么成功,要么失败,回滚到最初状态。在事务处理术语中,事务要么提交,要么中止。若要提交事务,所有参与者都必须保证对数据的任何更改是永久的。不论系统崩溃或是发生其他无法预料的事件,更改都必须是持久的。只要有一个参与者无法做出此保证,整个事务就会失败。事务范围内的所有数据更改将回滚到特定设置点。

事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

事务将多个操作紧密联系到一起,这样就能保证有联系的两种操作的一致性、以及数据的完整性。

事务用于将多个对象的多个操作分组在一起作为单个操作。 一旦事务启动,您可以使用GetObject函数打开一个对象。

当您处理使用GetObject打开的对象时,事务管理器将跟踪正在对象进行的更改。 您创建和添加到数据库的任何新对象也应该添加到事务以及AddNewlyCreatedDBObject函数。 一旦对象被编辑或添加到数据库中,您可以保存对数据库所做的更改,并使用事务管理器创建的事务对象中的Commit函数关闭所有打开的对象。 完成交易后,调用Dispose函数关闭事务。

从当前数据库的TransactionManager属性访问事务管理器。一旦对事务管理器进行引用,您可以使用以下方法之一来启动或获取事务:

StartTransaction - 通过创建一个Transaction对象的新实例来启动一个新的事务。当您需要多次写入对象并控制如何通过使用不同的嵌套级别回滚更改时,请使用此方法。

StartOpenCloseTransation - 创建一个OpenCloseTransaction对象,其行为类似于Transaction对象,它包装对象的Open和Close方法,从而更容易地关闭所有已打开的对象,而不必显式关闭每个已打开的对象。推荐用于可能被称为未知次数的支持或效用函数,并在使用大多数事件处理程序时使用。

一旦有一个事务或OpenCloseTransaction对象,使用GetObject方法来打开存储在数据库中的对象进行读取或写入。 GetObject方法返回一个可以转换为它所代表的实际对象类型的DBObject。

在事务处理期间打开的所有打开的对象都将在事务结束时关闭。要结束事务,请调用事务对象的Dispose方法。如果使用"使用和结束使用"关键字来指示事务的开始和结束,则不需要调用Dispose方法。

处理事务之前,您应该提交使用Commit方法进行的任何更改。如果在事务处理之前未提交更改,则所做的任何更改都将回滚到事务开始之前的状态。

可以启动多个事务。可以使用TransactionManager对象的NumberOfActiveTransactions属性检索活动事务的数量,而可以使用TopTransaction属性检索最高或最新的事务。

事务可以嵌套在另一个内部,以便回滚在执行例程期间所做的一些更改。

Civil 3D 二次开发 事务的更多相关文章

  1. Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点

    这一小节,我们创建派生于CivilCreateEntityDemo的类CivilCreateCogoPoint,来创建几何空间点. 1 创建类并添加字段及方法 首先在项目资源管理器中向本项目中添加类, ...

  2. 学习 Civil 3D二次开发从哪儿开始?

    1.1 从哪儿开始 对于多数的工程设计人员,不完全具备上节所述的各种条件.对于Civil 3D的应用可能比较熟悉:但对于计算机语言,只限于上学时所学的一点基础知识,步入工作岗位后与计算机语言基本无缘: ...

  3. Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——

    本节中我们通过创建几何空间点.曲面和采样线了解Civil 3D对象的创建方法.因Civil 3D对象的创建方法相比AutoCAD对象创建要简单的多,比如创建一个几何空间点,最简单的情况采用一行代码(没 ...

  4. Civil 3D 二次开发 创建AutoCAD对象—— 00 ——

    不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...

  5. Civil 3D 二次开发 名称模板不能正常工作

    using Autodesk.AECC.Interop.Land; using Autodesk.AECC.Interop.UiLand; using Autodesk.AutoCAD.Applica ...

  6. Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线

    在方法CreateLine内完成以下代码: 01 public void CreateLine() 02 { 03 PromptPointOptions ppo = new PromptPointOp ...

  7. Civil 3D 二次开发 翻转曲面高程分析颜色

    不解释,直接上代码及截图. [CommandMethod("RvsSEA")] public void ReverseSurfaceElevationAnalysis() { Ci ...

  8. Civil 3D 二次开发 新建CLR项目出现错误C2143

    新建CLR项目出现错误C2143 按照Objectarx Training创建.net混合项目,编译时出现一下错误: 原因不明: 解决方法: 在Stdafx.h文件中添加: #define WIN32 ...

  9. Civil 3D 2017本地化中VBA程序移植到2018版中

    中国本地化包简直就是一块鸡肋, 但对于某些朋友来说还真离不了: 可惜中国本地化包的推出一直滞后, 在最新版软件出来后1年多, 本地化还不一定能够出来, 即使出来了, 也只能是购买了速博服务的用户才能得 ...

随机推荐

  1. 异步操作之 Promise 和 Async await 用法进阶

    ES6 提供的 Promise 方法和 ES7 提供的 Async/Await 语法糖都可以更好解决多层回调问题, 详细用法可参考:https://www.cnblogs.com/cckui/p/99 ...

  2. Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果你曾经同过久的编译时间斗争过,那么你肯定对Pi ...

  3. IIS 日志导入到数据库的方法

    使用微软Log Parser 执行 logparser "SELECT * FROM d:\iislogs\u_ex18071705.log TO myTableName" -o: ...

  4. [2018福大至诚软工助教]UML设计小结

    [2018福大至诚软工助教]UML设计小结 一.得分 总分(50分) 团队信息 (4分) 队名 (1分) 团队成员的学号与姓名(需要标注队长)(1分) 本次作业的博客链接(1分) 三者完全,4分 团队 ...

  5. nginx强制使用https访问(http跳转到https)

    Nginx 的 Location 从零开始配置 - 市民 - SegmentFault 思否https://segmentfault.com/a/1190000009651161 nginx配置loc ...

  6. c# Mongodb两个字段不相等 MongoDB原生查询

    var document = new BsonDocument{ { "$where","this.StarTime!=this.EndTime"}, { }, ...

  7. oracle小记:dba_data_files

    今天给表空间扩展的时候,使用了dba_data_files进行查询.查阅了网上的资料. 该系统系统中含有以下字段 每个字段的含义如下:

  8. IdentityServer4【QuickStart】之使用ClientCredentials流程保护API

    使用ClientCredentials流程保护API 这个示例展示了使用IdentityServer中保护APIs的最基本的场景. 在这个场景中我们会定义一个API和一个想要访问它的客户端.客户端会在 ...

  9. Velocity中判断是否为空

    方法一: 使用 #ifnull() 或 #ifnotnull() eg:#ifnull ($foo) 要使用这个特性必须在velocity.properties文件中加入: userdirective ...

  10. Linux(CentOS7)命令学习摘要

    1. 修改机器名 hostnamectl set-hostname newname 2. hosts主机存放位置 /etc/hosts 3. 安装tigervncserver, 然后使用vncserv ...