根据个人经验,我知道 TransactionScope 与 SQL 配合得很好。我对 MSMQ 不太熟悉,但快速的Google 搜索显示了一些看起来运行成功的示例(通常是论坛讨论)。System.Messaging.MessageQueue 对象也有一个 .Transactional 属性,而 .Send() 方法有一个 MessageQueueTransaction 参数,所以我想说它们应该一起工作。
这是搜索中某个论坛的代码示例(不是我的代码):
using (TransactionScope scope = new TransactionScope())
{
using (MessageQueue myQueue = new MessageQueue(QUEUE_NAME))
{
if (myQueue.Transactional)
{
myQueue.Send(TicketTextBox.Text, "Message", MessageQueueTransactionType.Automatic);
}
}
scope.Complete();
}
只需将您的 SQL 代码放入 TransactionScope 的 using() 块中(在 .Complete() 之前),您就可以开始了吗?