Nearly always, if the provided adapter (SqlDataAdapter, OleDbDataAdapter etc.) don't do exactly what you want then it's worth considering implementing your own (not that difficult - inherit from System.Data.Common.DataAdapter and override the required methods). Doing it this way prevents you duplicating the same create connection, command, open connection, run command, loop & add to table, close connection logic in several places - you do it once in the DataAdapter and can call it with a simple .Fill method everywhere else.