一个操作有两个动作,不是同时执行。
比如:
我要做删除,一个动作是删除信息,一个是删除图片。
要保证两个都能一起完成。要一个出错,另一个要是做了就回退,还没做就不让做。

解决方案 »

  1.   

    try
    {
    删除图片;
    删除信息;
    }
    catch
    {
    恢复图片;
    恢复信息;
    ]
      

  2.   

    这我也想过,但恢复图片和恢复信息怎处理。是不是事先要把这图片和信息先暂存起来,一但出错就回复过来,还是。net框架有回复功能。还是自己得做一下处理
      

  3.   

    以前做过类似的东西,
    我是先讲图片COPY到另外一个文件夹中,该文件夹可以定义清空数据的周期,如果用户发现删除错了图片可以恢复该图片
      

  4.   

    楼主为什么不换一个思路呢?
    你的数据应是放到数据库里的吧???
    try
    {
    删除信息;
    删除图片;}
    catch
    {恢复信息;
    }
      

  5.   

    能不能放在xml文件里,xml可以放图片(2进制信息)
      

  6.   

    使用Command模式,一般软件的操作/撤消都使用Command模式, 
    每个命令(Command)担供一个Do和一个UnDo操作, 
    在try里面执行所有的Do, 在catch里执行所有的UnDo
      

  7.   

    Command模式是不是只提供数据库事务,程序里行吗?我做的跟数据库无关,访问数据用的是xml。图片是另存在服务器上的。要行的话,能不能提供个简单的例子?
      

  8.   

    sorry 
    示例:
    # region 事务处理:exeTrans(string[])通过一个SQL语句数组操作数据库,返回一个bool值
    public static bool exeTrans( string[] arr )
    {
    string str = "" ;
    bool blResult;
    OleDbConnection myConnection = CreatConnection();
    OleDbTransaction myTrans = myConnection.BeginTransaction();
    OleDbCommand myCommand = new OleDbCommand();
    myCommand.Transaction = myTrans;
    myCommand.Connection = myConnection;
    try
    {
    for( int i = 0 ; i < arr.Length ; i++ )
    {
    if( arr[i] == null || arr[i].Trim() == "" )
    continue ;
    myCommand.CommandText = arr[i] ;
    }
    myTrans.Commit();
    blResult = true;
    }
    catch( Exception ep )
    {
    str = ep.Message ;
    myTrans.Rollback();
    }
    finally
    {
    myCommand.Connection.Close() ;
    }
    return blResult;
    }
       #endregion
      

  9.   

    string arr= new string[2]{"delete from 图片 whrere xx=yy","delete from 信息 whrer xx=yy"}
    调用exeTrans
    exeTrans(arr);
    参数是个sql语句数组跟数据库无关是什么意思?
      

  10.   

    Command模式可用于任何操作, 
    比如说, InsertToDb操作,那么Do就是执行insert语句,而Undo则执行相应的Delete语句,
    而SavePicture操作, 那么Do就是把图片保存在一个文件夹内,而Undo就是则相反,从文件夹内删除.
      

  11.   

    我真受不了你楼主!!
    你认准你的不是数据库了>
    你这样试试
    你该怎么删除怎么删除!
    try
    {
    删除信息;//Copy一个这样的文件到其它目录!这样就可以恢复了!一旦删除信息不出错,
             //就不用判断删除图片出不出错了!你怎么学的这么死呀!
    删除图片;}
    catch
    {恢复信息;
    }
      

  12.   

    billy_zh(张老三) 说的是用设计模式。
     listhome(我听见猪来自地铁和人海) 说的是聪明和变通的方法。
     都厉害,感谢
      

  13.   

    最好的操作是 xiahouwen(活靶子.NET)这种
    用事务来实现
    两个操作都成功就递交
    有一个不成功就rollback
    一般转帐系统都是这样做的
      

  14.   

    我真受不了你楼主!!
    你认准你的不是数据库了>
    你这样试试
    你该怎么删除怎么删除!
    try
    {
    删除信息;//Copy一个这样的文件到其它目录!这样就可以恢复了!一旦删除信息不出错,
             //就不用判断删除图片出不出错了!你怎么学的这么死呀!
    删除图片;}
    catch
    {恢复信息;
    }^_^·~这个方法最好了~
      

  15.   

    paul8765(且行且珍惜) ,对不起,把你给忘了,你提的方法也很好。不过listhome(我听见猪来自地铁和人海)给你改进了下,觉得这样做更好。
      

  16.   

    有一个问题,如果一个电子商务网站,如果从银行转账。
    try
    {银行转账;
    卖出货物;
    }
    catch
    {
    货款还给银行
    卖出货物进入库存;
    }这样一定安全吗?如果银行转账完了以后,突然asp.net服务器停电,那该怎么办?很明显,catch中的语句肯定不会被执行。