non ho visto il tuo codice ma mi pare che la tua idea sia buona (forse perchè la uso anch'io
)
io metto tutto dentro il blocco Try-End Try
uso una transazione.
se tutto va bene, come ultima istruzione metto Transazione.Commit()
se si verifica un errore, nel blocco Catch faccio il Rollback della transazione e mostro il messaggio all'utente