If you are not familiar with the .Net Platform, DataSets are objects analogous to a database in memory. A DataSet contains not only a collection of DataTables, but also information about the primary keys and relations between the tables it contains. I ‘ve seen some people using DataSets to move data between the different layers of the application. I don’t like it, but that is part of other post, the big issue is when somebody starts using DataSets to build Web Services to interoperate with other technologies/organizations. This is a sad design decision because the way DataSets are serialized is not always understandable for non .Net consumers. The reason for this is explained very clearly in detail in this post by Paul Ballard.