ADO.NET Documentation

Microsoft Developer Network

Datasets and DataViews in ADO.NET

The Dataset object is a central component in ADO.NET, providing an in-memory representation of data. It's a collection of tables, relations, and constraints. A DataView object provides a customized view of a DataTable, allowing for sorting, filtering, and searching of data without modifying the original data source.

Datasets: In-Memory Data Representation

A Dataset acts like a disconnected, in-memory database. It can hold multiple DataTable objects, each representing a table from a data source. These tables can be related to each other, mimicking the structure of a relational database.

Key features of a Dataset include:

  • Table Collection: Contains one or more DataTable objects.
  • Relations: Defines relationships between tables within the Dataset, similar to foreign key constraints.
  • Constraints: Enforces data integrity rules, such as primary keys and unique constraints.
  • XML Support: Can be easily serialized to and deserialized from XML, facilitating data exchange.
  • RowState: Each row in a DataTable within a Dataset has a RowState property (e.g., Added, Modified, Deleted, Unchanged) which is crucial for tracking changes when updating the data source.
Why use a Dataset?

Datasets are ideal for scenarios where you need to work with data disconnected from the source, perform complex data manipulations locally, and then batch updates back to the server. They are also useful for scenarios involving XML data integration.

DataViews: Dynamic Views of Data

A DataView provides a dynamic, customizable view of a single DataTable. It does not contain data itself but rather provides a way to filter, sort, and search the rows of a DataTable. Multiple DataView objects can be created for the same DataTable, each with its own sorting and filtering criteria.

Key functionalities of a DataView:

  • Sorting: Rows can be sorted based on one or more columns.
  • Filtering: Rows can be filtered using a simple string expression (e.g., "Country = 'USA'").
  • Searching: You can efficiently find rows that match specific criteria.
  • Data Binding: DataView objects are commonly used for data binding to UI controls like grids and lists.
  • Real-time Updates: Changes made to the underlying DataTable are reflected automatically in the DataView.

Creating and Using a DataView

Here's a C# example of creating a DataView:


using System;
using System.Data;

// Assuming 'dataTable' is a populated DataTable object

DataView dataView = new DataView(dataTable);

// Set sorting criteria
dataView.Sort = "ProductName ASC";

// Set filter criteria
dataView.RowFilter = "Price > 100";

// Iterate through the filtered and sorted data
foreach (DataRowView rowView in dataView)
{
    Console.WriteLine($"Product: {rowView["ProductName"]}, Price: {rowView["Price"]}");
}
                

Interaction Between Datasets and DataViews

A DataView is always associated with a specific DataTable within a Dataset. When you populate a Dataset from a data source (e.g., using a SqlDataAdapter), you can then create DataView objects for the individual DataTables within that Dataset. This allows for flexible presentation and manipulation of the data without altering the core data structure.

Advanced Concepts

Data Relations: Relationships allow you to navigate between related DataTables within a Dataset. For example, you could have a Customers table and an Orders table, with a relation allowing you to easily find all orders for a specific customer.

Constraints: Constraints, such as UniqueConstraint and ForeignKeyConstraint, are crucial for maintaining data integrity within the Dataset. They ensure that data adheres to business rules even when the data is modified offline.

Understanding Datasets and DataViews is fundamental to building robust data-driven applications with ADO.NET, enabling efficient data management and presentation.