I am performing data changes on multiple databases, and I want to implement a transaction that will cover all of the changes.
This is what I currently have:
Using transactionScope is the answer. It even works with different DBMS!!!
Transactions over multiple databases
Use the TransactionScope class like this:
using (TransactionScope ts = new TransactionScope())
{
//all db code here
// if an error occurs jump out of the using block and it will dispose and rollback
ts.Complete();
}
The TransactionScope class will automatically convert to a distributed transaction if necessary.
As cletus said, you need some kind of two-phase commit. As the article states, this doesn't always work in practice. If you need a robust solution, you must find a way to serialize the transactions in such a way that you can do them one after the other and roll them back individually.
Since this depends on the specific case on which you don't provide any details, I can't give you ideas how to attack this.
If you wish to execute transaction across multiple instances of SQL Server then take a look at the Microsoft Distributed Transaction Coordinator documentation