This chapter provided a detailed overview of ADO.NET's disconnected classes. When you work with disconnected data, a DataTable object is almost always a requirement.
The DataTable object contains DataColumn objects, which define the schema, and DataRow objects, which contain the data. DataRow objects have RowState and DataRowVersion properties.
You use the RowState property to indicate whether the DataRow should be inserted, updated, or deleted from the data store if the data is ever persisted to a database.
The DataRow object can contain up to three copies of its data, based on the DataRowVersion. This feature allows the data to be rolled back to its original state, and you can use it when you write code to handle conflict resolution.
The DataSet object is an in-memory, relational data representation. The DataSet object contains a collection of DataTable objects and a collection of DataRelation objects.
DataSet and DataTable objects can be serialized and deserialized to and from a binary or XML file or stream. Data from other DataSet, DataTable, and DataRow objects can be merged into a DataSet object.
You can use the TableDataReader to provide stable, forward-only, read-only looping over a DataTable. You can also use it to populate many Windows and Web controls.