EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-8 15:21:14

[资料] AutoCAD中的事务处理

前不久在程序中遇到个问题,我要删除一个对象,明明代码也执行了,但是始终那对象删不掉,折腾了N久无果,后来把删除代码放到了事务处理外面,发现居然可以了,继续折腾,终于找到原因,原来我有嵌套事务处理,但是在最外面一个事务处理中由于跳转语句,没有执行到Commit(),结果就是所有的操作都滚回了,查了点资料。事务处理相关,见如下:
开始新事务并打开对象
事务管理器是从当前 Database 的 TransactionManager 属性访问的。一旦对事务管理器进行了引用,就可以使用 StartTransaction 方法启动一个新事务。StartTransaction 会创建一个 Transaction 对象的实例并允许用户使用 GetObject 方法打开对象。在事务结束的时候,所有在事务打开期间打开的对象都会被关闭。若要结束事务,请调用 Transaction 对象的 Dispose 方法。如果利用关键字 Using 和 End 表示事务的启动和结束,就不需要调用 Dispose 方法。在 Transaction 销毁前,应用使用 Commit 方法提交所有的更改。如果 Transaction 在销毁前更改没有被提交,所有的修改都会回滚到先前 Transaction 启动时状态。提交与回滚更改
在使用事务处理的时候,用户能够决定什么时候将修改过的对象保存到图形数据库中。在一个事务内使用 Commit 方法保存一个对象已完成的修改。如果你的程序遇到了一个错误,就可以使用 Abort 方法回滚一个事务内所有的修改。如果在没有调用 Commit 之前调用了 Dispose 方法,事务内所有的修改都会被回滚。无论 Commit 或 Abort 是否被调用,都必须调用Dispose 以标示事务的结束。如果 transaction 对象是以 Using 语句开始,就不必调用 Dispose。
同时可以启动多个事务。活动事务的数量可以通过检索 TransactionManager 对象的 NumberOfActiveTransactions 属性得到,而最近创建的事务可以通过 TopTransaction 属性检索到。事务可以由一个嵌套到另一个中,以回滚某些程序执行期间所做的修改。
嵌套事务

事务可以由一个嵌套到另一个中。外部的事务能够撤消你的程序所做的所有修改而内部事务仅仅能撤消部分修改。当你使用嵌套事务时,启动顶部事务也就等于启动外部事务。当启动新事务时,它们也被添加进了前一个事务中。嵌套事务必须按与他们创建顺序相反的顺序提交或终止事务。因此,如果你有三个事务,在关闭第三个前就必须先关闭第三个或者说是最里面的一个,最后关闭第一个。如果终止了第一个事务,通过三个事务所做的修改都会撤消。下面的插图显示在嵌套时事务如何出现。http://s7.sinaimg.cn/middle/69e8fdf0h95028bd46fe6&690
页: [1]
查看完整版本: [资料] AutoCAD中的事务处理