The DataSet
is a
memory-resident representation of data including tables,
relationships between the tables, and both unique and foreign key
constraints. It is used for working with and transporting data in a
disconnected environment.
There are four important characteristics of the
DataSet
:
It’s not provider-specific. It’s impossible to tell by looking at the
DataSet
, or at the objects contained within the
DataSet
, which provider was used to retrieve the
data or what the original data source was. The
DataSet
provides a consistent programming model
regardless of the data source.
It’s always disconnected.
Information is retrieved from the data source and placed in the
DataSet
using another ADO.NET object—the
DataAdapter
. At no point does a
DataSet
directly reference a
Connection
object.
It can track changes made to its data. The DataSet
contains multiple versions of each row
of data in the tables, which allows changes to be updated back to the
data source using a DataAdapter
object, changes to
be cancelled, and XML DiffGrams of the changes to be created.
It can contain multiple tables. Unlike the traditional ADO Recordset
, the
DataSet
approximates a relational database in
memory.
DataSets
exist as both untyped and
strongly typed. Strongly typed
DataSet
s are a collection of automatically
generated classes that inherit from the DataSet
,
DataTable
, and DataRow
classes,
and provide additional properties, methods, and events based on the
DataSet
schema. A strongly typed
DataSet
can make programs more intuitive to write
and allows the Visual Studio .NET IDE to provide functionality such
as autocomplete and for the compiler to detect type mismatch errors
and misspelled names during compilation rather than at runtime.
Strongly typed DataSet
s are discussed in detail in
Chapter 13.
The data stored in the DataSet
can be manipulated
programmatically and populated using a DataAdapter
or from XML documents or streams. The actual
DataSet
schema can be created programmatically,
read from a data source, read from an XML schema, or inferred from an
XML document or stream. The DataSet
can easily be
serialized to XML for marshalling between processes with .NET
remoting or to meet persistent storage requirements.
Figure 6-1 shows the structure of the
DataSet
and the contained classes.