Implementando transações em vários bancos de dados

Estou executando alterações de dados em vários bancos de dados e quero implementar uma transação que abrangerá todas as alterações.

Isto é o que eu tenho atualmente:

try
{
    db[1].begintransaction();
    db[1].ExecuteNonQuery();

    db[2].begintransaction();
    db[2].ExecuteNonQuery();

    ...

    db[N].begintransaction();
    db[N].ExecuteNonQuery();

    // will execute only if no exception raised during the process
    for (int a = 0; a < N; a++)
    {
        db[a].Commit();// what if there is an error/exception here
    }
}
catch
{
    for (int a = 0; a < N; a++)
    {
        db[a].RollBack();
    }
}

O problema é que o acima iria falhar horrivelmente se uma exceção acontece durante umCommit() (veja o comentário). Existe alguma maneira melhor de realizar isso?

questionAnswers(4)

yourAnswerToTheQuestion