Freigeben über


DataSet-Klasse

Stellt einen Datencache im Arbeitsspeicher dar.

Namespace: System.Data
Assembly: System.Data (in system.data.dll)

Syntax

'Declaration
<SerializableAttribute> _
Public Class DataSet
    Inherits MarshalByValueComponent
    Implements IListSource, IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, _
    ISerializable
'Usage
Dim instance As DataSet
[SerializableAttribute] 
public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable
[SerializableAttribute] 
public ref class DataSet : public MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable
/** @attribute SerializableAttribute() */ 
public class DataSet extends MarshalByValueComponent implements IListSource, IXmlSerializable, 
    ISupportInitializeNotification, ISupportInitialize, ISerializable
SerializableAttribute 
public class DataSet extends MarshalByValueComponent implements IListSource, IXmlSerializable, 
    ISupportInitializeNotification, ISupportInitialize, ISerializable

Hinweise

Das DataSet, ein aus einer Datenquelle abgerufener Datencache im Arbeitsspeicher, ist eine Hauptkomponente der ADO.NET-Architektur. Das DataSet besteht aus einer Auflistung von DataTable-Objekten, die Sie mit DataRelation-Objekten aufeinander beziehen können. Sie können die Datenintegrität im DataSet auch mithilfe des UniqueConstraint-Objekts und des ForeignKeyConstraint-Objekts erzwingen. Weitere Informationen über das Arbeiten mit DataSet-Objekten finden Sie unter Verwenden von DataSets in ADO.NET.

Während DataTable-Objekte die Daten enthalten, ermöglicht Ihnen DataRelationCollection das Navigieren in der Tabellenhierarchie. Die Tabellen befinden sich in einer DataTableCollection, auf die Sie über die Tables-Eigenschaft zugreifen. Beachten Sie beim Zugriff auf DataTable-Objekte, dass für diese die Groß- bzw. Kleinschreibung bedingt beachtet wird. Wenn z. B. eine DataTable "mydatatable" und eine weitere "Mydatatable" benannt ist, wird in einer Zeichenfolge zum Suchen einer dieser Tabellen die Groß- und Kleinschreibung unterschieden. Wenn jedoch "mydatatable", aber nicht "Mydatatable" vorhanden ist, wird in der Suchzeichenfolge die Groß- und Kleinschreibung nicht unterschieden. Weitere Informationen über das Arbeiten mit DataTable-Objekten finden Sie unter Erstellen einer DataTable.

Ein DataSet kann Daten sowie das Schema als XML-Dokumente lesen und schreiben. Die Daten und das Schema können dann über HTTP übertragen und von sämtlichen Anwendungen auf allen XML-fähigen Plattformen verwendet werden. Sie können das Schema mit der WriteXmlSchema-Methode als XML-Schema speichern. Das Schema und die Daten können mithilfe der WriteXml-Methode gespeichert werden. Verwenden Sie zum Lesen eines XML-Dokuments mit Schema und Daten die ReadXml-Methode.

In einer typischen Implementierung mit mehreren Ebenen werden die folgenden Schritte zum Erstellen und Aktualisieren eines DataSet und zum anschließenden Aktualisieren der ursprünglichen Daten ausgeführt:

  1. Erstellen Sie mithilfe eines DataAdapter jede DataTable in einem DataSet, und füllen Sie sie mit Daten aus einer Datenquelle.

  2. Ändern Sie die Daten in einzelnen DataTable-Objekten, indem Sie DataRow-Objekte hinzufügen, aktualisieren oder löschen.

  3. Rufen Sie die GetChanges-Methode auf, um ein zweites DataSet zu erstellen, das nur die Änderungen an den Daten darstellt.

  4. Rufen Sie die Update-Methode von DataAdapter auf, und übergeben Sie das zweite DataSet als Argument.

  5. Rufen Sie die Merge-Methode auf, um die Änderungen aus dem zweiten DataSet mit dem ersten zusammenzuführen.

  6. Rufen Sie AcceptChanges für das DataSet auf. Sie können auch RejectChanges aufrufen, um die Änderungen zu verwerfen.

Hinweis

Das DataSet-Objekt und das DataTable-Objekt erben von MarshalByValueComponent und unterstützen die ISerializable-Schnittstelle für Remoting. Remoting kann nur für diese ADO.NET-Objekte ausgeführt werden.

Thema Position
Gewusst wie: Erstellen eines typisierten Datasets Datenzugriff in Visual Studio
Exemplarische Vorgehensweise: Anzeigen von hierarchischen Daten in einem TreeView-Steuerelement Erstellen von ASP.NET-Webanwendungen in Visual Studio
Gewusst wie: Erstellen eines typisierten Datasets Datenzugriff in Visual Studio
Exemplarische Vorgehensweise: Anzeigen von hierarchischen Daten in einem TreeView-Steuerelement Erstellen von ASP.NET-Webanwendungen in Visual Studio
Exemplarische Vorgehensweise: Anzeigen von hierarchischen Daten in einem TreeView-Steuerelement Erstellen von ASP.NET-Webanwendungen in Visual Studio

Beispiel

Im folgenden Beispiel erstellen und füllen mehrere kombinierte Methoden ein DataSet aus der Datenbank Northwind.

Option Explicit On
Option Strict On

Imports System.Data
Imports system.Data.SqlClient

Public Class NorthwindDataSet

    Public Shared Sub Main()
        Dim connectionString As String = _
            GetConnectionString()
        ConnectToData(connectionString)
    End Sub

    Private Shared Sub ConnectToData( _
        ByVal connectionString As String)

        ' Create a SqlConnection to the Northwind database.
        Using connection As SqlConnection = New SqlConnection( _
           connectionString)

            ' Create a SqlDataAdapter for the Suppliers table.
            Dim suppliersAdapter As SqlDataAdapter = _
               New SqlDataAdapter()

            ' A table mapping names the DataTable.
            suppliersAdapter.TableMappings.Add("Table", "Suppliers")

            ' Open the connection.
            connection.Open()
            Console.WriteLine("The SqlConnection is open.")

            ' Create a SqlCommand to retrieve Suppliers data.
            Dim suppliersCommand As SqlCommand = New SqlCommand( _
               "SELECT SupplierID, CompanyName FROM dbo.Suppliers;", _
               connection)
            suppliersCommand.CommandType = CommandType.Text

            ' Set the SqlDataAdapter's SelectCommand.
            suppliersAdapter.SelectCommand = suppliersCommand

            ' Fill the DataSet.
            Dim dataSet As DataSet = New DataSet("Suppliers")
            suppliersAdapter.Fill(dataSet)

            ' Create a second SqlDataAdapter and SqlCommand to get
            ' the Products table, a child table of Suppliers. 
            Dim productsAdapter As SqlDataAdapter = _
                New SqlDataAdapter()
            productsAdapter.TableMappings.Add("Table", "Products")

            Dim productsCommand As SqlCommand = New SqlCommand( _
               "SELECT ProductID, SupplierID FROM dbo.Products;", _
               connection)
            productsAdapter.SelectCommand = productsCommand

            ' Fill the DataSet.
            productsAdapter.Fill(dataSet)

            ' Close the connection.
            connection.Close()
            Console.WriteLine("The SqlConnection is closed.")

            ' Create a DataRelation to link the two tables
            ' based on the SupplierID.
            Dim parentColumn As DataColumn = _
               dataSet.Tables("Suppliers").Columns("SupplierID")
            Dim childColumn As DataColumn = _
               dataSet.Tables("Products").Columns("SupplierID")
            Dim relation As DataRelation = New _
               System.Data.DataRelation("SuppliersProducts", _
               parentColumn, childColumn)
            dataSet.Relations.Add(relation)

            Console.WriteLine( _
               "The {0} DataRelation has been created.", _
               relation.RelationName)
        End Using

    End Sub

    Private Shared Function GetConnectionString() As String
        ' To avoid storing the connection string in your code,  
        ' you can retrieve it from a configuration file.
        Return "Data Source=(local);Initial Catalog=Northwind;" _
           & "Integrated Security=SSPI;"
    End Function
End Class
using System;
using System.Data;
using System.Data.SqlClient;

namespace Microsoft.AdoNet.DataSetDemo
{
    class NorthwindDataSet
    {
        static void Main()
        {
            string connectionString = GetConnectionString();
            ConnectToData(connectionString);
        }

        private static void ConnectToData(string connectionString)
        {
            //Create a SqlConnection to the Northwind database.
            using (SqlConnection connection =
                       new SqlConnection(connectionString))
            {
                //Create a SqlDataAdapter for the Suppliers table.
                SqlDataAdapter adapter = new SqlDataAdapter();

                // A table mapping names the DataTable.
                adapter.TableMappings.Add("Table", "Suppliers");

                // Open the connection.
                connection.Open();
                Console.WriteLine("The SqlConnection is open.");

                // Create a SqlCommand to retrieve Suppliers data.
                SqlCommand command = new SqlCommand(
                    "SELECT SupplierID, CompanyName FROM dbo.Suppliers;",
                    connection);
                command.CommandType = CommandType.Text;

                // Set the SqlDataAdapter's SelectCommand.
                adapter.SelectCommand = command;

                // Fill the DataSet.
                DataSet dataSet = new DataSet("Suppliers");
                adapter.Fill(dataSet);

                // Create a second Adapter and Command to get
                // the Products table, a child table of Suppliers. 
                SqlDataAdapter productsAdapter = new SqlDataAdapter();
                productsAdapter.TableMappings.Add("Table", "Products");

                SqlCommand productsCommand = new SqlCommand(
                    "SELECT ProductID, SupplierID FROM dbo.Products;",
                    connection);
                productsAdapter.SelectCommand = productsCommand;

                // Fill the DataSet.
                productsAdapter.Fill(dataSet);

                // Close the connection.
                connection.Close();
                Console.WriteLine("The SqlConnection is closed.");

                // Create a DataRelation to link the two tables
                // based on the SupplierID.
                DataColumn parentColumn =
                    dataSet.Tables["Suppliers"].Columns["SupplierID"];
                DataColumn childColumn =
                    dataSet.Tables["Products"].Columns["SupplierID"];
                DataRelation relation =
                    new System.Data.DataRelation("SuppliersProducts",
                    parentColumn, childColumn);
                dataSet.Relations.Add(relation);
                Console.WriteLine(
                    "The {0} DataRelation has been created.",
                    relation.RelationName);
            }
        }

        static private string GetConnectionString()
        {
            // To avoid storing the connection string in your code, 
            // you can retrieve it from a configuration file.
            return "Data Source=(local);Initial Catalog=Northwind;"
                + "Integrated Security=SSPI";
        }
    }
}

Vererbungshierarchie

System.Object
   System.ComponentModel.MarshalByValueComponent
    System.Data.DataSet

Threadsicherheit

Dieser Typ ist bei Multithread-Lesevorgängen sicher. Sie müssen alle Schreibvorgänge synchronisieren.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

DataSet-Member
System.Data-Namespace

Weitere Ressourcen

Verwenden von DataSets in ADO.NET