Αν παίζεις σε .NET 2.0, στο ADO.NET 2.0 το DataTable object έχει άλλη μια μέθοδο διαθέσιμη γι αυτή τη δουλειά. Πρόκειται για τη Load η οποία παίρνει δύο παραμέτρους, η πρώτη είναι ένα DataReader object και η δεύτερη ένα enumeration. H διαφορά της σε σχέση με τη Fill είναι ότι αν χρησιμοποιήσεις τη Fill, τότε μόλις "μπουν" τα data στο target DataTable, θεωρείται ότι είναι τα αρχικά data και δεν μπορείς να τα στείλεις πίσω στη βάση (με Update ενός TableAdapter). Με τη Load μπορείς να τα "μαρκάρεις" ως νέα ώστε κατόπιν να κάνεις ακριβώς αυτό!
Dim dr As IDataReader = DataSet1.DataTable1.CreateDataReader
PrintDataset.DataTable1.Load(dr, LoadOption.Upsert)
Στο snippet φαίνεται άλλη μια νέα μέθοδος του DataTable, η CreateDataReader η οποία σου επιστρέφει έναν DataReader από ένα ήδη γεμάτο DataTable.
Τέλος, υπάρχει επίσης και η LoadDataRow μέσω της οποίας μπορείς να κάνεις περίπου την ίδια δουλειά, αλλά με ένα loop διαβάζεις μία-μία τις εγγραφές του DataReader και βάσει κάποιας λογικής την κάνεις Load ή όχι στο target DataTable.
Vir prudens non contra ventum mingit