wxwinter代码空间

兰竹菊梅★春夏秋冬☆

首页 联系 订阅 管理

现在,事情好像都已经有解决方案了

在数据层(我先这么描术),可以在数据库的存储过程中用使用事务
在中间层(或者叫逻辑层,我先这么描术),可以用DTS,MTS,COM+
在前台(或都叫表示层,我先这么描术),可以用ADO.NET的事物机制

当然,ADO.NET也可以写中间层,COM+也可放到前台,存储过程中也能用ADO.NET,COM+

可是不管如何,事情好像都已经有解决方案了,要System.Transactions出来干吗

因为有的数据库不支持事务............

因为写代码不只是为了操作数据库...............

相信大家都有类似这样的经历:

将一个大目录(有N多子目录与文件)剪切到另一个磁盘上(可能要60分钟以上),

如果这时当机了.....................

如果System.IO类支持事务,以上问题就不用考虑了


其实没有支持事务的IO也不要紧,我们可以自已实现

第一种方式:

1.先将这个大目录复制的要剪切到的磁盘的同级目录,名为temp

2.复制完成后,删除原目录。

3.将temp目录改名为原目录名

这里有两类操作,复制与删除叫过程操作,改名叫瞬间操作。

过程操作,我们认为有明显的阶段性,有发生中断的可有,对资有很大的依赖性
瞬间操作,我们认为无法操制其过程,发生中断的可能性很小,可以认为其不可能在操作进行中出现阶段

性错误。

当然,以是中相对的,操作系统的瞬间操作,对CPU来说可能是一个过程操作,

我们不能把代码的逻辑错误,服务器的电源故障冗余方案,与CPU的过热保护放到一段代码中去实现

也就是说事物处理是靠非事务性代码用逻辑关系实现的,事物也有可能无法回滚事最初状态,

面对这种情况,我们要做的就是合理的划分操作单元,完善逻辑关系(具体后面再细谈)

第二种方式:

对原目录的文件结构建立一个清单,每复制一个文件,就在清单中标记一下,复制完成后再从原目录中删除文件。

好了,不管代码效率如何,总算有了自已IO事物的解决方案,

那我们还要System.Transactions类干吗........

posted on 2006-09-06 19:24  wxwinter  阅读(159)  评论(0)    收藏  举报