Realizacja transakcji w wielu bazach danych

Przeprowadzam zmiany danych w wielu bazach danych i chcę zaimplementować transakcję, która obejmie wszystkie zmiany.

Właśnie to mam obecnie:

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();
    }
}

Problem polega na tym, że powyższe nie powiedzie się strasznie, jeśli zdarzy się wyjątek podczasCommit() (patrz komentarz). Czy jest lepszy sposób na osiągnięcie tego?

questionAnswers(4)

yourAnswerToTheQuestion