IDbTransaction будет автоматически отменен после его удаления. Таким образом, обычный шаблон выглядит примерно так (C #, я оставлю перевод в VB.NET в качестве упражнения):
using(SqlConnection connection = ...)
{
connection.Open();
using(SqlTransaction transaction = connection.BeginTransaction(...)
{
... do database stuff
// Last line in the using block commits the transaction
transaction.Commit();
} // Transaction disposed here - if Commit wasn't called, it will be rolled back
} // Connection disposed here
т.е. вам не нужно явно вызывать Rollback в случае исключения. Вы редко будете вызывать Rollback явно - это будет необходимо, только если вы обнаружите условие промежуточной транзакции (например, нарушение бизнес-правила), которое требует явного отката.
Обработка исключений обычно выполняется на более высоком уровне, т. Е. В вызывающем коде может быть блок try / catch.