.NET Documentation

DataAdapter Class

The DataAdapter class in ADO.NET is a crucial component for bridging the gap between a data source and a DataSet. It acts as a mediator, enabling you to retrieve data from a data source, populate a DataSet with that data, and then synchronize changes made in the DataSet back to the data source.

Core Functionality

A DataAdapter provides the following primary functionalities:

  • Fill: Retrieves data from a data source using a SelectCommand and populates a DataSet or DataTable.
  • Update: Propagates changes made to a DataSet or DataTable back to the data source. This involves generating and executing appropriate INSERT, UPDATE, and DELETE commands based on the row state (Added, Modified, Deleted) of the data.

Types of DataAdapters

ADO.NET provides specific implementations of the DataAdapter class for various data providers:

  • SqlDataAdapter: For SQL Server databases.
  • OleDbDataAdapter: For OLE DB compliant data sources.
  • OdbcDataAdapter: For ODBC compliant data sources.
  • OracleDataAdapter: For Oracle databases.

Each of these classes inherits from the abstract base class DbDataAdapter, which in turn inherits from the abstract class DataAdapter.

Key Properties

The DataAdapter class has several important properties that configure its behavior:

  • SelectCommand: A Command object that retrieves data from the data source.
  • InsertCommand: A Command object that is executed to insert new records into the data source.
  • UpdateCommand: A Command object that is executed to update existing records in the data source.
  • DeleteCommand: A Command object that is executed to delete records from the data source.
  • MissingMappingAction: Specifies how the DataAdapter should behave when it encounters a missing mapping between a data source column and a DataSet table or column.
  • MissingSchemaAction: Specifies how the DataAdapter should behave when it encounters a missing schema object (table or column) in the DataSet.

Example Usage (C#)

Here's a simplified example demonstrating how to use a SqlDataAdapter to retrieve data into a DataSet:

using System;
using System.Data;
using System.Data.SqlClient;

public class DataAdapterExample
{
    public static void Main(string[] args)
    {
        string connectionString = "YourConnectionStringHere"; // Replace with your actual connection string
        string query = "SELECT CustomerID, CompanyName, ContactName FROM Customers";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
            {
                DataSet dataSet = new DataSet();

                try
                {
                    connection.Open();
                    adapter.Fill(dataSet, "Customers"); // Fills the DataSet with data

                    // Process the data in the DataSet
                    foreach (DataRow row in dataSet.Tables["Customers"].Rows)
                    {
                        Console.WriteLine($"ID: {row["CustomerID"]}, Name: {row["CompanyName"]}, Contact: {row["ContactName"]}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"An error occurred: {ex.Message}");
                }
            }
        }
    }
}

Updating Data

The Update method is more complex as it requires the DataAdapter to know how to map the DataSet to the database. This is typically achieved by setting the InsertCommand, UpdateCommand, and DeleteCommand properties. The DataAdapter then inspects the RowState of each row in the specified DataTable and executes the appropriate command.

The DataAdapter is a fundamental tool for data access in ADO.NET, providing a robust and flexible mechanism for managing data between your application and its data sources.