Eso se llama una transacción distribuida. Para usarla, añade una referencia a System.Transactions y usa el objeto TransactionScope:
using (TransactionScope ts = new TransactionScope())
{
// Abrir conexion1
// abrir conexion2
// Usar ambas conexiones
//Si todo ha ido bien:
ts.Complete(); // esto hace un commit de la ransaccion
}
// si sales del "using" sin haber llamado al .complete se hace un rollback de las dos transacciones.
Tiene requisitos para funcionar: Es necesario que los drivers de base de datos empleados por las dos conexiones soporten el protocolo TX, y es necesario que en el equipo cliente y en los dos servidores tengas en marcha el coordinador de transacciones distribuidas
(DTC) y que sus puertos estén abiertos en los firewalls.