ADO.NET is the overall name for the set of classes (spread across a number of namespaces including System.Data, System.Data.Common, System.Data.SqlTypes, System.Data.SqlClient, and System.Data.OleDb) that the .NET Framework provides for working with data in relational databases. One of the strengths of ADO.NET is that it can use the same objects equally well to work with data that isn't stored relationally. For example, you could use XML files, or even plain text files, to hold the data that ADO.NET uses. Regardless of the original source, the high-level abstract ADO.NET objects are the same.
The ADO.NET object model is broken up into two distinct sets of objects ‚ data provider objects and DataSet objects ‚ because the .NET Framework separates the task of using data from the task of storing data. The DataSet objects provide a memory-resident, disconnected set of objects that you can load with data. The data provider objects handle the task of working directly with data sources. One of the provider objects, the DataAdapter object, serves as a conduit between the two sets of objects. By using a DataAdapter, you can load data from a database into a DataSet and later save changes back to the original data source. Figure A.1 shows schematically how these two sets of objects fit together in the overall ADO.NET architecture.