gpt4 book ai didi

c# - "transaction"如何进行一次IO操作和一次数据库执行?

转载 作者:太空狗 更新时间:2023-10-30 00:51:23 24 4
gpt4 key购买 nike

我有一个包含正在运行的处理器的服务,它做两件事:

1- Create a file in a directory.
2- Set your own status to "Processed".

但是,当服务恰好在处理过程中停止时,文件会在目录中创建,但是过程并未完成,如下所示:

  1- Create a file in a directory.
-----SERVICE STOPPED-----
2- Set your own status to "Processed".

我需要一种方法来使用数据库命令处理 IO 操作,该怎么做?

编辑 - 重要

问题是创建的文件被另一个应用捕获,所以只有命令执行成功才需要真正创建文件。因为如果这个文件被创建,另一个应用捕获他,并且发生数据库错误后,问题继续。

OBS:我正在使用 C# 进行开发。

最佳答案

您可以使用事务性 NTFS (TxF)。这为文件操作提供了执行完全原子的、一致的、隔离的和持久的操作的能力。

它可以与大量其他交易技术结合使用。因为 TxF 使用了新的内核事务管理器 (KTM) 功能,并且因为新的 KTM 可以直接与 Microsoft® 分布式事务处理协调器 (DTC) 一起工作。

任何可以将 DTC 作为事务协调器使用的技术都可以在单个事务中使用事务文件操作。这意味着您现在可以在与 SQL 操作、通过 WS-AtomicTransaction 调用 Web 服务、通过 OleTransactionProtocol 调用 Windows Communication Foundation 服务,甚至是事务化 MSMQ 操作相同的事务中加入事务处理文件操作。

文件和数据库原子事务的例子:

using (connectionDb)
{
connectionDb.Open();
using (var ts = new System.Transactions.TransactionScope())
{
try
{
File.Copy(sourceFileName, destFileName, overwrite);
connectionDb.ExecuteNonQuery();
ts.Complete();
}
catch (Exception)
{
throw;
}
finally
{ }
}
}

有关详细信息,请参阅以下链接:

TxF on Codeplex

Msdn reference

注意:请记住 DTC 会带来严重的性能损失。

关于c# - "transaction"如何进行一次IO操作和一次数据库执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com