Erstellen und Konfigurieren von TableAdapters in .NET Framework-Anwendungen

Hinweis

Datasets und verwandte Klassen sind ältere .NET-Technologien aus den frühen 2000er Jahren, die es Anwendungen ermöglichen, mit Daten im Arbeitsspeicher zu arbeiten, während die Anwendungen von der Datenbank getrennt sind. Sie sind besonders nützlich für Anwendungen, die es Benutzern ermöglichen, Daten zu ändern und die Änderungen wieder in der Datenbank zu speichern. Obwohl sich Datasets als sehr erfolgreiche Technologie erwiesen haben, empfehlen wir, dass neue .NET-Anwendungen Entity Framework Core verwenden. Entity Framework bietet eine natürlichere Möglichkeit, mit tabellarischen Daten als Objektmodelle zu arbeiten, und verfügt über eine einfachere Programmierschnittstelle.

TableAdapters ermöglichen die Kommunikation zwischen der Anwendung und einer Datenbank. Sie stellen eine Verbindung mit der Datenbank her, führen Abfragen oder gespeicherte Prozeduren aus, und geben entweder eine neue Datentabelle zurück oder füllen eine vorhandene DataTable mit den zurückgegebenen Daten aus. TableAdapter-Instanzen können außerdem aktualisierte Daten von der Anwendung zurück an die Datenbank senden.

TableAdapter-Instanzen werden für Sie erstellt, wenn Sie eine der folgenden Aktionen durchführen:

  • Ziehen Sie Datenbankobjekte aus Server-Explorer in den DataSet-Designer.

  • Führen Sie den Assistenten für die Datenquellenkonfiguration aus, und wählen Sie entweder den Datenquellentyp Datenbank oder Webdienst aus.

    Assistent für die Datenquellenkonfiguration in Visual Studio

Sie können auch eine neue TableAdapter-Instanz erstellen und mit einer Datenquelle konfigurieren, indem Sie eine TableAdapter-Instanz aus der Toolbox in einen leeren Bereich der DataSet-Designer-Oberfläche ziehen.

Eine Einführung in TableAdapter-Instanzen finden Sie unter Füllen von Datasets mit TableAdapters.

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in diesem Artikel. Möglicherweise verwenden Sie eine andere Edition von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE.

Verwenden des Assistenten für die TableAdapter-Konfiguration

Führen Sie den Assistenten für die TableAdapter-Konfiguration aus, um TableAdapter-Instanzen und die zugeordneten Datentabellen zu erstellen oder zu bearbeiten. Sie können eine vorhandene TableAdapter-Instanz konfigurieren, indem Sie im DataSet-Designer mit der rechten Maustaste darauf klicken.

Screenshot des Konfigurations-Assistenten für Tabellenadapter.

Wenn Sie eine neue TableAdapter-Instanz aus der Toolbox ziehen, wenn der DataSet-Designer im Fokus ist, startet der Assistent und fordert Sie zur Angabe auf, mit welcher Datenquelle die TableAdapter-Instanz eine Verbindung herstellen soll. Auf der nächsten Seite fragt der Assistent, welche Art von Befehlen er für die Kommunikation mit der Datenbank verwenden soll, entweder SQL-Anweisungen oder gespeicherte Prozeduren. (Dieser Bildschirm wird nicht angezeigt, wenn Sie einen TableAdapter konfigurieren, der bereits einer Datenquelle zugeordnet ist.)

  • Sie haben die Möglichkeit, eine neue gespeicherte Prozedur in der zugrunde liegenden Datenbank zu erstellen, wenn Sie über die richtigen Berechtigungen für die Datenbank verfügen. Wenn Sie nicht über diese Berechtigungen verfügen, ist diese Option nicht verfügbar.

  • Sie können auch vorhandene gespeicherte Prozeduren für die Befehle SELECT, INSERT, UPDATE und DELETE der TableAdapter-Instanz ausführen. Die gespeicherte Prozedur, die dem Befehl UPDATE zugewiesen ist, wird beispielsweise ausgeführt, wenn die TableAdapter.Update()-Methode aufgerufen wird.

Ordnen Sie die Parameter der ausgewählten gespeicherten Prozedur den entsprechenden Spalten in der Datentabelle zu. Wenn die gespeicherte Prozedur z. B. einen Parameter mit dem Namen @CompanyName annimmt, welcher der Spalte CompanyName in der Tabelle übergeben wird, legen Sie als Quellspalte des @CompanyName-Parameters entsprechend CompanyName fest.

Hinweis

Die dem SELECT-Befehl zugeordnete gespeicherte Prozedur wird ausgeführt, indem die Methode der TableAdapter-Instanz aufgerufen wird, die Sie im nächsten Schritt des Assistenten angeben. Die Standardmethode ist Fill, sodass der Code, der in der Regel zum Ausführen der SELECT-Prozedur verwendet wird, TableAdapter.Fill(tableName) lautet. Wenn Sie den Standardnamen Fill ändern, ersetzen Sie Fill durch den von Ihnen zugewiesenen Namen, und ersetzen Sie „TableAdapter“ durch den tatsächlichen Namen der TableAdapter-Instanz (z. B. CustomersTableAdapter).

  • Das Auswählen der Option Methoden erstellen, um Updates direkt an die Datenbank zu senden entspricht dem Festlegen der GenerateDBDirectMethods-Eigenschaft auf „True“. Die Option ist nicht verfügbar, wenn die ursprüngliche SQL-Anweisung nicht genügend Informationen bereitstellt oder die Abfrage keine aktualisierbare Abfrage ist. Diese Situation kann beispielsweise bei JOIN-Abfragen und Abfragen auftreten, die einen einzelnen Wert (Skalarwert) zurückgeben.

Die erweiterten Optionen im Assistenten ermöglichen Folgendes:

  • Generieren Sie INSERT-, UPDATE- und DELETE-Anweisungen basierend auf der SELECT-Anweisung, die auf der Seite Generieren von SQL-Anweisungen definiert ist.
  • Optimistische Nebenläufigkeit verwenden
  • Geben Sie an, ob die Datentabelle aktualisiert werden soll, nachdem INSERT- und UPDATE-Anweisungen ausgeführt wurden.

Konfigurieren Sie die Fill-Methode einer TableAdapter-Instanz.

Manchmal möchten Sie vielleicht das Schema der Tabelle der TableAdapter-Instanz ändern. Dazu ändern Sie die primäre Fill-Methode der TableAdapter-Instanz. TableAdapter-Instanzen werden mit einer primären Fill-Methode erstellt, die das Schema der zugeordneten Datentabelle definiert. Die primäre Fill-Methode basiert auf der Abfrage oder gespeicherten Prozedur, die Sie beim ursprünglichen Konfigurieren der TableAdapter-Instanz eingegeben haben. Dies ist die erste (oberste) Methode unter der Datentabelle im DataSet-Designer.

TableAdapter mit mehreren Abfragen

Alle an der Fill-Hauptmethode der TableAdapter-Instanz vorgenommenen Änderungen spiegeln sich im Schema der zugeordneten Datentabelle wider. Wenn Sie z. B. in der Fill-Hauptmethode eine Spalte aus der Abfrage entfernen, wird die Spalte auch aus der zugeordneten Datentabelle entfernt. Außerdem wird durch das Entfernen der Spalte aus der Fill-Hauptmethode die Spalte aus allen weiteren Abfragen für diese TableAdapter-Instanz entfernt.

Sie können den Assistenten für die TableAdapter-Abfragekonfiguration verwenden, um zusätzliche Abfragen für die TableAdapter-Instanz zu erstellen und zu bearbeiten. Diese zusätzlichen Abfragen müssen dem Tabellenschema entsprechen, es sei denn, sie geben einen Skalarwert zurück. Jede zusätzliche Abfrage weist einen von Ihnen angegebenen Namen auf.

Das folgende Beispiel zeigt, wie Sie eine zusätzliche Abfrage namens FillByCity aufrufen:

CustomersTableAdapter.FillByCity(NorthwindDataSet.Customers, "Seattle")

So starten Sie den Assistenten für die TableAdapter-Abfragekonfiguration mit einer neuen Abfrage

  1. Öffnen Sie das Dataset im DataSet-Designer.

  2. Wenn Sie eine neue Abfrage erstellen, ziehen Sie ein Abfrage-Objekt von der Registerkarte DataSet der Toolbox auf eine DataTable, oder wählen Sie im Kontextmenü des TableAdapters Abfrage hinzufügen aus. Sie können auch ein Query-Objekt in einen leeren Bereich des DataSet-Designers ziehen, wodurch eine TableAdapter-Instanz ohne zugeordnete DataTable erstellt wird. Diese Abfragen können nur einzelne Werte (Skalarwerte) zurückgeben oder UPDATE-, INSERT- bzw. DELETE-Befehle für die Datenbank ausführen.

  3. Wählen oder erstellen Sie auf dem Bildschirm Datenverbindung auswählen die Verbindung aus, die die Abfrage verwenden soll.

    Hinweis

    Dieser Bildschirm wird nur angezeigt, wenn der Designer die zu verwendende Verbindung nicht ermitteln kann oder wenn keine Verbindungen verfügbar sind.

  4. Wählen Sie auf dem Bildschirm Wählen Sie einen Befehlstyp aus eine der folgenden Methoden zum Abrufen von Daten aus der Datenbank aus:

    • SQL-Anweisungen verwenden – Mit dieser Option können Sie eine SQL-Anweisung eingeben, um die Daten in der Datenbank auszuwählen.

    • Erstellen einer neuen gespeicherten Prozedur – Mit dieser Option können Sie den Assistenten eine neue gespeicherte Prozedur (in der Datenbank) auf der Grundlage der angegebenen SELECT-Anweisung erstellen lassen.

    • Verwenden vorhandener gespeicherter Prozeduren – Mit dieser Option können Sie beim Ausführen der Abfrage eine vorhandene gespeicherte Prozedur ausführen.

So starten Sie den Assistenten für die TableAdapter-Abfragekonfiguration für eine vorhandene Abfrage

  • Wenn Sie eine vorhandene TableAdapter-Abfrage bearbeiten, klicken Sie mit der rechten Maustaste auf die Abfrage, und wählen Sie dann im Kontextmenü Konfigurieren aus.

    Hinweis

    Wenn Sie mit der rechten Maustaste auf die Hauptabfrage einer TableAdapter-Instanz klicken, wird das TableAdapter- und DataTable -Schema neu konfiguriert. Wenn Sie jedoch mit der rechten Maustaste auf eine zusätzliche Abfrage in einer TableAdapter-Instanz klicken, wird nur die ausgewählte Abfrage konfiguriert. Der Assistent für die TableAdapter-Konfiguration konfiguriert die TableAdapter-Definition neu, während der Assistent für die TableAdapter-Abfragekonfiguration nur die ausgewählte Abfrage neu konfiguriert.

So fügen Sie einer TableAdapter-Instanz eine globale Abfrage hinzu

  • Globale Abfragen sind SQL-Abfragen, die entweder einen einzelnen Wert (Skalarwert) oder keinen Wert zurückgeben. In der Regel führen globale Funktionen Datenbankvorgänge wie Einfügungen, Aktualisierungen und Löschungen aus. Sie aggregieren auch Informationen, z. B. die Anzahl der Kunden in einer Tabelle oder die Gesamtgebühren für alle Artikel in einer bestimmten Bestellung.

    Sie fügen globale Abfragen hinzu, indem Sie ein Query-Objekt von der Registerkarte DataSet der Toolbox in einen leeren Bereich des DataSet-Designersziehen.

  • Stellen Sie eine Abfrage bereit, die die gewünschte Aufgabe ausführt, z. B. SELECT COUNT(*) AS CustomerCount FROM Customers.

    Hinweis

    Wenn Sie ein Query-Objekt direkt auf den DataSet-Designer ziehen, wird eine Methode erstellt, die nur einen Skalarwert (einzelnen Wert) zurückgibt. Während die von Ihnen ausgewählte Abfrage oder gespeicherte Prozedur möglicherweise mehr als einen Wert zurückgibt, gibt die vom Assistenten erstellte Methode nur einen einzelnen Wert zurück. Die Abfrage könnte z. B. die erste Spalte der ersten Zeile der zurückgegebenen Daten zurückgeben.