Einführung in Datenadapter

Aktualisiert: November 2007

Datenadapter sind ein fester Bestandteil von ADO.NET-verwalteten Anbietern. Hierbei handelt es sich um eine Objektgruppe, die für die Kommunikation zwischen einer Datenquelle und einem Dataset verwendet wird. (Außer Adaptern enthalten verwaltete Anbieter Verbindungsobjekte, Datenreaderobjekte und Befehlsobjekte.) Adapter werden zum Austauschen von Daten zwischen einer Datenquelle und einem Dataset verwendet. Bei vielen Anwendungen bedeutet dies, dass Daten aus einer Datenbank in ein Dataset eingelesen und die geänderten Daten anschließend vom Dataset in die Datenbank zurückgeschrieben werden. Ein Datenadapter kann Daten jedoch zwischen einer beliebigen Quelle und einem Dataset verschieben. Es könnte z. B. einen Adapter geben, der Daten zwischen einem Microsoft Exchange-Server und einem Dataset verschiebt.

Hinweis:

In der vorherigen Version von Visual Studio wurden Datenadapter für die Kommunikation zwischen einer Anwendung und einer Datenbank verwendet. Während Datenadapter eine zentrale Komponente von .NET Framework-Datenanbieter (ADO.NET) darstellen, sind TableAdapters vom Designer generierte Komponenten, die das Verschieben von Daten zwischen der Anwendung und einer Datenbank vereinfachen. Weitere Informationen zum Verwenden von TableAdapters finden Sie unter Übersicht über TableAdapters.

In der Regel sind Adapter konfigurierbar, sodass Sie angeben können, welche Daten in und aus dem Dataset verschoben werden sollen. Oftmals werden dazu Verweise auf SQL-Anweisungen oder gespeicherte Prozeduren verwendet, die zum Lesen oder Schreiben von Daten aus bzw. in eine Datenbank aufgerufen werden.

Visual Studio stellt diese Datenadapter zur Verwendung mit Datenbanken bereit:

  • Das OleDbDataAdapter-Objekt ist für alle Datenquellen geeignet, die durch einen OLE DB-Anbieter verfügbar gemacht werden.

  • Das SqlDataAdapter-Objekt ist speziell für SQL Server gedacht. Da es keine OLE DB-Schicht passieren muss, ist es schneller als die OleDbDataAdapter-Klasse. Allerdings kann es nur mit SQL Server 7.0 oder höher verwendet werden.

  • Das OdbcDataAdapter-Objekt ist für den Zugriff auf ODBC-Datenquellen optimiert.

  • Das OracleDataAdapter-Objekt ist für den Zugriff auf Oracle-Datenbanken optimiert.

    Hinweis:

    Der .NET Framework-Datenanbieter setzt sich aus den Komponenten Datenadapter, Datenverbindungen, Datenbefehle und Datenreader zusammen. Microsoft und Drittanbieter können weitere .NET Framework-Datenanbieter zur Verfügung stellen, die in Visual Studio integriert werden können. Weitere Informationen über die verschiedenen .NET Framework-Datenanbieter finden Sie unter .NET Framework-Datenanbieter (ADO.NET).

Sie können mit den folgenden Abschnitten der Namespaces von verwalteten Anbietern in .NET Framework Adapter erstellen und bearbeiten.

Namespace von verwaltetem SqlClient-Anbieter
Namespace von verwaltetem OleDb-Anbieter

Im Allgemeinen tauscht jeder Datenadapter Daten zwischen einer einzelnen Datenquelltabelle und einem einzelnen DataTable-Objekt im Dataset aus. Wenn das Dataset mehrere Datentabellen enthält, werden in der Regel mehrere Datenadapter verwendet, um Daten in das Dataset einzulesen und seine Daten in einzelne Datenquelltabellen zurückzuschreiben.

Wenn Sie eine Tabelle in einem Dataset mit Daten füllen möchten, rufen Sie eine Adaptermethode auf, die eine SQL-Anweisung oder eine gespeicherte Prozedur ausführt. Der Adapter erstellt ein Datenreaderobjekt (SqlDataReader, OleDbDataReader, OdbcDataReader oder OracleDataReader), um die Daten in das Dataset einzulesen.

Hinweis:

Sie können Daten aus der Datenbank lesen, ohne sie in einem Dataset speichern zum müssen. Diese Methode kann in den Situationen sehr effizient sein, in denen schreibgeschützte Daten betroffen sind. Weitere Informationen finden Sie weiter unten unter "Schreibgeschützte Daten". Sie können SQL-Anweisungen auch direkt ausführen, ohne sie zum Füllen eines Datasets zu verwenden. Weitere Informationen finden Sie unter Befehle und Parameter (ADO.NET).

Ebenso rufen Sie zum Aktualisieren der Datenbank eine Adaptermethode auf, die eine entsprechende SQL-Anweisung oder gespeicherte Prozedur ausführt, um die eigentliche Aktualisierung in der Datenbank vorzunehmen.

Datenadapter und verknüpfte Tabellen

Das Vorhandensein von separaten Tabellen im Dataset hat unter anderem zur Folge, dass ein Datenadapter in der Regel nicht auf SQL-Befehle oder gespeicherte Prozeduren verweist, die Tabellen verknüpfen. Stattdessen werden die Informationen aus verknüpften Tabellen von verschiedenen Adaptern separat in das Dataset eingelesen. Danach wird ein DataRelation-Objekt verwendet, um die Einschränkungen zwischen den Datasettabellen (z. B. sich überlappende Aktualisierungen) zu verwalten und Ihnen die Navigation zwischen verknüpften Hauptdatensätzen und untergeordneten Datensätzen zu ermöglichen.

Angenommen, Sie verwenden zwei verknüpfte Tabellen (Customers und Orders) in der Datenbank Northwind. Anstatt eine Verknüpfung anzugeben, die beide Tabellen zu einem einzigen Resultset kombiniert, können i. d. R. zwei Adapter definiert werden. Mit dem einen Adapter wird die Customers-Tabelle im Dataset gefüllt. Mit dem zweiten Adapter werden Order-Datensätze in eine andere Datasettabelle eingelesen. Die einzelnen Adapter enthalten wahrscheinlich Auswahlkriterien, um die Anzahl der Datensätze in den Datentabellen zu beschränken.

Sie können im Dataset auch ein DataRelation-Objekt definieren, das angibt, dass Order-Datensätze über das CustomerID-Feld mit Customer-Datensätzen verknüpft sind. Sie können die Tabellen immer noch einzeln verwalten. Dies wäre nicht möglich, wenn Sie vor dem Abrufen von Datensätzen aus der Datenquelle Tabellen verknüpft hätten. In Situationen, in denen Sie mit verknüpften Datensätzen arbeiten möchten, können Sie Eigenschaften und Methoden des DataRelation-Objekts aufrufen.

Weitere Informationen über Datenbeziehungen finden Sie unter Beziehungen in Datasets.

Verbindungsobjekte

Ein Datenadapter benötigt eine offene Verbindung zu einer Datenquelle, um Daten lesen und schreiben zu können. Daher verwendet ein Adapter Verbindungsobjekte (SqlConnection, OleDbConnection, OdbcConnection oder OracleConnection) für die Kommunikation mit der einer Datenquelle. (Der Adapter kann bis zu vier Verbindungsverweise enthalten, einen für jeden Aktionstyp, den er ausführen kann: Auswählen, Aktualisieren, Einfügen und Löschen.)

Die folgende Tabelle listet Verbindungsobjekte auf, die auf der Registerkarte Daten der Toolbox enthalten sind:

Verbindungsobjekt

Beschreibung

SqlConnection

Eine Verbindung zu einer SQL Server-Datenbank der Version 7.0 oder höher.

OleDbConnection

Eine Verbindung zu einer beliebigen OLE DB-Datenquelle.

OdbcConnection

Eine Verbindung zu einer ODBC-Datenquelle.

OracleConnection

Eine Verbindung zu einer Oracle-Datenbank.

In allen Fällen steht das Verbindungsobjekt für eine eindeutige Sitzung innerhalb der Datenquelle. Alle Verbindungsobjekte stellen Eigenschaften bereit, um Verbindungsdetails (z. B. Benutzer-ID, Kennwort und Einstellung des Zeitlimits für die Verbindung) einzurichten und zu ändern. Darüber hinaus stellen sie Methoden bereit, mit denen Datenbanktransaktionen gestartet, bestätigt und zurückgesetzt werden können. Weitere Informationen zu Verbindungsobjekten finden Sie unter Herstellen einer Verbindung mit einer Datenquelle (ADO.NET).

Sicherheitshinweis:

Das Speichern vertraulicher Informationen (z. B. Servername, Benutzername und Kennwort) kann sich auf die Sicherheit der Anwendung auswirken. Die Windows-Automatisierung (integrierte Sicherheit) stellt eine sicherere Möglichkeit zum Steuern des Zugriffs auf eine Datenbank dar.

ADO.NET-Befehlsobjekte

Mit einem Adapter können Sie Datensätze in einer Datenquelle lesen, hinzufügen, aktualisieren und löschen. Damit Sie angeben können, wie jede dieser Operationen eintreten soll, unterstützt der Adapter die vier folgenden Eigenschaften:

  • SelectCommand – Verweis auf einen Befehl (SQL-Anweisung oder Name einer gespeicherten Prozedur), der Zeilen aus dem Datenspeicher abruft.

  • InsertCommand – Verweis auf einen Befehl zum Einfügen von Zeilen in den Datenspeicher.

  • UpdateCommand – Verweis auf einen Befehl zum Ändern von Zeilen im Datenspeicher.

  • DeleteCommand – Verweis auf einen Befehl zum Löschen von Zeilen aus dem Datenspeicher.

Die Eigenschaften sind selbst Objekte. Sie sind Instanzen der SqlCommand-Klasse, der OleDbCommand-Klasse, der OdbcCommand-Klasse oder der OracleCommand-Klasse. Die Objekte unterstützen eine CommandText-Eigenschaft, die einen Verweis auf eine SQL-Anweisung oder eine gespeicherte Prozedur enthält.

Hinweis:

Die Befehlsklasse muss mit der Verbindungsklasse übereinstimmen. Wenn Sie z. B. ein SqlConnection-Objekt für die Kommunikation mit einem SQL Server verwenden, müssen Sie auch Befehle verwenden, die von der SqlCommand-Klasse abgeleitet sind.

Obwohl Sie den Text eines Befehlsobjekts explizit festlegen können, ist dies nicht immer erforderlich; Visual Studio generiert in vielen Situationen die benötigten SQL-Anweisungen. Außerdem kann der Adapter zur Laufzeit automatisch geeignete SQL-Anweisungen generieren, wenn die Objekte UpdateCommand, InsertCommand, oder DeleteCommand nicht angegeben wurden. Weitere Informationen finden Sie unter Generieren von Befehlen mit 'CommandBuilder'-Objekten (ADO.NET).

Sie können Befehlsobjekte jedoch während der Entwurfszeit und der Laufzeit bearbeiten, um eine direktere Kontrolle über die Art und Weise zu erhalten, in der die Befehle ausgeführt werden. Sie können z. B. den Befehl, der einem SelectCommand-Objekt zugeordnet ist, kurz vor dessen Ausführung erstellen oder ändern.

Sie können unabhängig vom Datenadapter auch selbst Befehle ausführen. Das bedeutet, dass Sie beliebige SQL-Befehle über den Datenadapter übergeben können, z. B. Befehle zum Definieren oder Ändern von Datenbankdefinitionen. Sie können auch gespeicherte Prozeduren aufrufen, die keine Datensätze zurückgeben, z. B. eine gespeicherte Prozedur, die einen Benutzereintrag an einer Datenbank überprüft. Weitere Informationen finden Sie unter Ausführen eines Befehls (ADO.NET).

Sicherheitshinweis:

Wenn Sie Datenbefehle mit einer CommandType-Eigenschaft mit dem Wert Text verwenden, müssen Sie die von einem Client gesendeten Informationen sorgfältig überprüfen, bevor Sie diese an die Datenbank übergeben. Böswillige Benutzer könnten versuchen, veränderte oder zusätzliche SQL-Anweisungen zu senden (einzufügen), um unautorisierten Zugriff zu erhalten oder die Datenbank zu beschädigen. Bevor Sie Benutzereingaben an eine Datenbank übergeben, müssen Sie immer die Zulässigkeit der Informationen überprüfen. Es wird empfohlen, möglichst immer parametrisierte Abfragen oder gespeicherte Prozeduren zu verwenden. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

Befehlsparameter

Die Befehle in einem Datenadapter sind im Allgemeinen parametergesteuert. Der Befehl für die SelectCommand-Eigenschaft z. B. besitzt oft einen Parameter in seiner WHERE-Klausel, sodass Sie zur Laufzeit angeben können, welche Datensätze aus der Datenbank abgerufen werden sollen. Die anderen Befehle verwenden Parameter, die es Ihnen ermöglichen, die Daten zu übergeben, die zur Laufzeit in einen Datensatz geschrieben werden sollen. Darüber hinaus können Sie angeben, welcher Datensatz in der Datenbank aktualisiert werden soll. Weitere Informationen über die Verwendung von Parametern in Datenadaptern finden Sie unter Parameter in Datenadapterbefehlen.

Lesen und Aktualisieren mit Datenadaptern

Hauptaufgabe des Datenadapters ist, Daten zwischen einem Datenspeicher und einem Dataset auszutauschen. Der Adapter unterstützt spezifische Methoden, um die Daten zwischen den beiden hin- und herzuschieben.

Hinweis:

Wenn Sie Daten nur lesen (nicht aktualisieren) möchten, müssen Sie diese nicht in einem Dataset speichern. Stattdessen können Sie die Daten direkt aus der Datenbank aus- und in eine Anwendung einlesen. Weitere Informationen finden Sie weiter unten unter "Schreibgeschützte Daten".

Mit einem Datenadapter können Sie folgende Operationen ausführen:

  • Zeilen aus einem Datenspeicher in entsprechende Datentabellen innerhalb eines Datasets abrufen.

    Verwenden Sie die Fill-Methode für ein Datenadapterobjekt (SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter oder OracleDataAdapter), um Zeilen in ein Dataset abzurufen. Wenn Sie die Fill-Methode aufrufen, überträgt diese eine SQL SELECT-Anweisung an den Datenspeicher.

  • Änderungen an der Dataset-Tabelle an den entsprechenden Datenspeicher übertragen.

    Verwenden Sie die Update-Methode des Adapters, um eine Dataset-Tabelle des Datasets in den Datenspeicher zu übertragen. Wenn Sie die Methode aufrufen, führt diese die erforderlichen SQL-Anweisungen (INSERT, UPDATE oder DELETE) aus, und zwar abhängig davon, ob der betroffene Datensatz neu hinzugefügt, geändert oder gelöscht wird.

    Weitere Informationen zum Ausführen von Aktualisierungen mithilfe von Datenadaptern finden Sie unter Aktualisieren von Datenquellen mit 'DataAdapters' (ADO.NET).

Schreibgeschützte Daten

Wenn Ihr Programm ein Abfrageergebnis sequenziell und schreibgeschützt verarbeiten muss, können Sie ein Datenreaderobjekt verwenden, anstatt ein Dataset mit Daten zu füllen. Ein Datenreaderobjekt ruft Daten aus der Datenquelle ab und übergibt sie der Anwendung direkt. Bezeichnenderweise werden Datenreaderobjekte für einen schreibgeschützten Vorwärtszugriff auf Daten verwendet, wenn Sie die Daten nicht in einem Dataset zwischenspeichern müssen. (Der Datenadapter verwendet selbst ein Datenreaderobjekt zum Füllen eines Datasets mit Daten.) Ein Beispiel dafür wäre eine Web Forms-Seite, die Datenbankinformationen anzeigt. Da die Web Forms-Seite bei jedem Umlauf erneut erstellt wird, ist es oftmals nicht sinnvoll, die Daten in einem Dataset zu speichern.

Visual Studio stellt vier Datenreaderobjekte bereit: SqlDataReader, OleDbDataReader, OdbcDataReader und OracleDataReader. Weitere Informationen zu einem effizienteren schreibgeschützten Zugriff mithilfe des Datenreaderobjekts finden Sie unter 'DataAdapters' und 'DataReaders' (ADO.NET).

Tabellenzuordnungen

Wenn Sie Visual Studio-Tools zum Generieren eines Datasets aus Datenbanktabellen verwenden, sind die Namen der Tabellen und Spalten im Dataset standardmäßig mit denen in der Datenbank identisch. Es kann jedoch sein, dass Sie dies als unpraktisch empfinden. Möglicherweise sind die in der Datenbank verwendeten Namen zu kurz oder zu lang; oder für die Namen wurde eine Fremdsprache verwendet. Wenn Sie mit einem bestehenden Schema arbeiten, stimmen die in der Datenbank verwendeten Namen vielleicht auch nicht mit denen überein, die im Schema definiert sind.

Daher müssen die Namen in der Datenbank und dem Dataset nicht identisch sein. Stattdessen können Sie neue Tabellen- und Spaltennamen im Dataset-Befehl erstellen und diese anschließend den Namen zuordnen, die in der Datenbank verwendet werden. Adapter verwenden die TableMappings-Auflistung, um die Verbindung zwischen den Strukturen des Datasets (Datentabellen und Datenspalten) und den Strukturen des Datenspeichers (Tabellen und Spalten) aufrechtzuerhalten. Weitere Informationen zu Tabellenansichten finden Sie unter Tabellenzuordnung in Datenadaptern.

Siehe auch

Aufgaben

Gewusst wie: Konfigurieren von Parametern für Datenadapter

Gewusst wie: Zuordnen von Datenquellspalten zu DataSet-Datentabellenspalten

Konzepte

Auffüllen eines 'DataSet' durch einen 'DataAdapter' (ADO.NET)

Neue Datenfeatures

Erstellen von Datenanwendungen mit Visual Studio

Weitere Ressourcen

'DataAdapters' und 'DataReaders' (ADO.NET)

Erstellen von Datenadaptern

Exemplarische Vorgehensweisen zur Arbeit mit Daten

ADO.NET