I guess it's in MSDN somewhere, but I understood the deal only when
reading books on the subject - especially ADO.NET Cookbook from Oreilly.
"In a nutshell",
A dataset is a disconnected data store in memory which your app would
"Fill" with data (including multiple tables and data relations), change
at will, and "Update" back to the DB.
(if you don't use a dataset you have to use a DataReader, which is a
forward-only data cursor)
DataAdapters are in charge of Filling and Updating DataSets. They do
this by using DataCommands for select, update, insert and delete.
Each DataCommand uses a DataConnection to connect to the database.
HTH