Molto semplice nel tuo codice aggiungi le righe:
Dim dsTemp as DataSet() = ds.copy();
Session["temporaneo"]=dsTemp;
Scrivile dove ritieni opportuno. Poi esegui tutte le operazioni sulle tabelle e lavori sempre su dstemp e non su ds, solo alla fine quando vuoi salvare tutti i tuoi dati scrivi:
if (Session["temporaneo"]!=null) ds = ((DataSet)Session["temporaneo"]);
e qui usi il codice che hai con gli adapter come prima, ma in questo modo hai filtrato l'operazione come se facessi una transazione perchè puoi svuotare la sessione quando vuoi (Session["temporaneo"]=null) e di fatto aver eseguito così un rollback.