如果尚未上载所有文件,如何回滚

时间:2013-08-27 09:53:07

标签: c# asp.net sql sql-server ado.net

好的,所以我有一个webform和5个FileUpload控件..用户可以上传任意数量的文件从1到5,但如果这些文件中的任何一个没有上传,那么我想要回滚所有内容...... 例如: 如果用户选择了4个文件,如果在第4个时发生了意外情况,那么我想删除或回滚之前的3个文件上传内容。 我试过了..

 try
{
  using (TransactionScope scope = new TransactionScope())
                {
dboperation dbinsert=new dboperation();
if (file1.ContentLength > 0)
{
      .......
      .......
dbo.insert(bytes, lastid, file2.FileName);
}

if (file2.ContentLength > 0)
{
      .......
      .......
dbo.insert(bytes, lastid, file2.FileName);
}

if (file3.ContentLength > 0)
{
      .......
      .......
dbo.insert(bytes, lastid, file2.FileName);
}//till ...file5

scope.Complete();
}//end of transactionscope
}


catch { }

'dboperation'是c#文件中的类,'dbinsert'是执行插入存储过程的方法。我的猜测是我需要使用交易范围,但我不确定我是否正确,即使我是如何实现这一目标的呢?

2 个答案:

答案 0 :(得分:2)

您需要实施transaction。您应该在插入第一个事务之前启动事务并捕获发生的任何错误。如果出现错误,您必须回滚事务。如果一切顺利,您可以提交交易。

您还应该在dboperation之外移动连接,或者在dboperation中创建一个从外部获取连接并使用该方法的方法

答案 1 :(得分:1)

为此你需要使用Transaction之类的东西。我举个例子。

class WithTransaction
{
    public WithTransaction()
    {
        string FirstQuery = "INSERT INTO Table1 VALUES('Vineeth',24)";
        string SecondQuery = "INSERT INTO Table2 VALUES('HisAddress')";
        int ErrorVar = 0;
        using (SqlConnection con = new SqlConnection("your connection string"))
        {
            try
            {
                SqlCommand ObjCommand = new SqlCommand(FirstQuery, con);
                SqlTransaction trans;
                con.Open();
                trans = con.BeginTransaction();
                ObjCommand.Transaction = trans;
                //Executing first query

                //What ever operation on your database do here

                ObjCommand.ExecuteNonQuery();  //Exected first query
                ObjCommand.CommandText = SecondQuery;
                ObjCommand.ExecuteNonQuery();  //Exected first query
                //Everything gone fine. So commiting
                ObjCommand.Transaction.Commit();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error but we are rollbacking");
                ObjCommand.Transaction.Rollback();
            }
            con.Close();
        }
    }
}

或者您可以使用TransactionScope

检查此链接

  

TransactionScope

我希望这会对你有所帮助。