Из личного опыта я знаю, что 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-код в блок using () для TransactionScope (перед .Complete ()), и вы должны быть в порядке?