ASP.Net数据库和IO操作在一个事务中

时间:2012-07-06 03:23:59

标签: c# asp.net database transactions

我需要在.Net Web应用程序中执行一系列文件系统和数据库操作,如果发生故障,则会回滚所有内容。操作是:

  1. 使用HttpPostedFile将多页tiff文件上传到服务器
  2. 将已过帐文件的记录插入数据库
  3. 将多个tiff中的单个图像作为服务器上的单个文件进行处理和保存
  4. 将单个图像的记录插入数据库
  5. 我可以使用3.5框架中的可用类在单个事务中包装这些操作吗?我应该手动使用try catch块和回滚操作吗?

2 个答案:

答案 0 :(得分:1)

  

我可以使用3.5中的可用类在单个事务中包装这些操作   框架?

不,而且没有任何其他技术,因为你的链接很薄弱。

1.使用HttpPostedFile

将多页tiff文件上传到服务器

2.将发布文件的记录插入数据库

3.将多个tiff中的单个图像作为服务器上的单个文件进行处理和保存

4.将单个图像的记录插入数据库

2-4可以在现代窗口的事务中轻松完成 - NTFS可以参与交易。

你的问题是1. 1是不可能的,因为 - 注意 - HTTP没有交易的概念。如果上传是从您的服务器发生的,您可以在上传CRM(补偿资源管理器)中上传插件,但是您需要能够通过HTTP Too删除它们以防回滚和(完全但是可选)上传它们但不是在你提交之前可见。这是因为API支持它 - 写起来很简单(.NET中的CRM非常简单),否则你就会死路一条或者做出妥协。

如果你谈到上传到你的服务器然后在交易中处理,技术上要正确地处理多图像上传你必须决定transaciotnal contro所在的位置。上传必须有一个合适的API来启动一个事务,用事务令牌进行上传,然后在完成所有上传时提交(因为只有处理可以开始)。这对于编程来说是微不足道的 - 甚至在大多数情况下都不使用TPM,因为您可以在处理过程中滚动逻辑事务。但是如果你愿意的话,CRM可以在回滚的情况下再次处理必要的更改。

答案 1 :(得分:0)

尝试以下内容:

using (TransactionScope scope = new TransactionScope())
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        { 
            // Do all work here...  
        }
        catch (Exception ex)
        {
           // Delete files
           // LogError(ex);
        }                   
    }
    scope.Complete();
}