none
事务操作中涉及文件操作如何处理? RRS feed

  • 问题

  • 逻辑层删除方法中,使用事务,当中还包括文件的删除操作。

    发生异常时,事务会回滚,数据库的数据没删除,但是文件操作无法控制怎么办?

    2010年6月21日 1:58

答案

  • 你好!

         如果你使用的是.NET类库提供的事务机制,那只能回滚数据库的操作,如果要回滚其他操作,必须你自己写代码才可以实现!


    周雪峰
    2010年6月21日 5:08
    版主
  • 同意

    可以用一个集合把操作的文件记录下来,如果数据库事务成功了,再删除文件,否则就返回。

    2010年6月21日 7:27
  • 目前 TransactionScope 只能处理数据库的事务,对于其他事务,如 I/O,目前的 .NET 版本无法处理。

    这个问题涉及到了关于事务回滚的实现方法。数据库用的是回滚日志的方法,在执行事务时,同时也将事务操作写进了日志文件,因此如果有异常发生,回滚时,如果机器断电,也会成功回滚,因为回滚依赖的操作日志还在。

    据我所知基于 I/O 的事务控制,MSI (Windows Installer) 就做的非常好。它也是利用回滚日志 (*.rbf) 来实现 I/O 事务控制的。对于您的情况,只能根据楼上给位的回答自己写代码控制。


    Mark Zhou
    2010年6月21日 9:56
  • 目前 TransactionScope 只能处理数据库的事务,对于其他事务,如 I/O,目前的 .NET 版本无法处理。
    键盘人生。
    2010年6月21日 10:16

全部回复

  • 你好!

         如果你使用的是.NET类库提供的事务机制,那只能回滚数据库的操作,如果要回滚其他操作,必须你自己写代码才可以实现!


    周雪峰
    2010年6月21日 5:08
    版主
  • 同意

    可以用一个集合把操作的文件记录下来,如果数据库事务成功了,再删除文件,否则就返回。

    2010年6月21日 7:27
  • 同意

    可以用一个集合把操作的文件记录下来,如果数据库事务成功了,再删除文件,否则就返回。


    如果在删除文件的时候机器断电了。剩余的文件没删除完怎么办?

    但是如果事务在机器断电后,就自动回滚了。

    2010年6月21日 8:52
  • 如果像Justin Liu_FoxDave说的,也无法100%控制。
    如果在删除文件的时候机器断电了。剩余的文件没删除完怎么办?

    有没有什么好的方法呢?

    2010年6月21日 9:05
  • 你好!

         通常删除到一半的情况视为失败,恢复删除前的状态!


    周雪峰
    2010年6月21日 9:19
    版主
  • 目前 TransactionScope 只能处理数据库的事务,对于其他事务,如 I/O,目前的 .NET 版本无法处理。

    这个问题涉及到了关于事务回滚的实现方法。数据库用的是回滚日志的方法,在执行事务时,同时也将事务操作写进了日志文件,因此如果有异常发生,回滚时,如果机器断电,也会成功回滚,因为回滚依赖的操作日志还在。

    据我所知基于 I/O 的事务控制,MSI (Windows Installer) 就做的非常好。它也是利用回滚日志 (*.rbf) 来实现 I/O 事务控制的。对于您的情况,只能根据楼上给位的回答自己写代码控制。


    Mark Zhou
    2010年6月21日 9:56
  • 你好!

         通常删除到一半的情况视为失败,恢复删除前的状态!


    周雪峰


    键盘人生。
    2010年6月21日 10:16
  • 目前 TransactionScope 只能处理数据库的事务,对于其他事务,如 I/O,目前的 .NET 版本无法处理。
    键盘人生。
    2010年6月21日 10:16