我有一个页面的操作,提交后有三个地方提交数据
一、数据库insert或update数据
二、上传文件到系统文档目录
三、上传图片到系统图片目录如果这3个操作其中一个出现异常,可能会留下垃圾数据
怎么解决

解决方案 »

  1.   

    数据库操作可以使用事务,如果不提交的话,数据是不会插进去的流程大概这样:开始事务
    数据库insert或update数据 
    如果出错,回滚,return上传文件到系统文档目录 
    如果出错,回滚,return上传图片到系统图片目录 
    如果出错,回滚,删除上一步上传的文件,return都成功了,提交数据
      

  2.   


    try
    {
        BeginTrans();  //开始事务
        InsertTable(); //插入表    try
        {
            UpLoadFile(); //上传文件
            try
            {
                UpLoadImage();  //上传图片
            }
            catch (Exception ex)
            {
                WriteLog(ex);
                throw new UploadImageException(ex.Message);
            }
        }
        catch (Exception ex)
        {
            if (ex is UploadImageException)  //如果是上传图片异常,则删除文件
            {
                DeleteFile();
            }
            WriteLog(ex);
            throw ex;
        }
        ComitTrans(); //提交事务
    }
    catch (Exception ex)
    {
        WriteLog(ex);
        RollBackTrans(); //回滚事务
    }
      

  3.   

    SQL Server 2008有个FileStream新特性可以保证数据库和文件系统的事务一致性,有条件的话不妨考虑下。