Abfragen von Datasets 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.

Für die Suche nach bestimmten Datensätzen in einem Dataset verwenden Sie die FindBy-Methode für die DataTable, schreiben Ihre eigene foreach-Anweisung, um eine Schleife über die Rows-Sammlung der Tabelle zu erstellen, oder verwenden LINQ to DataSet.

Groß-/Kleinschreibung von Datasets

In einem Dataset wird bei Tabellen- und Spaltennamen die Groß-/Kleinschreibung standardmäßig nicht beachtet. Das heißt, eine Tabelle in einem Dataset namens „Customers“ kann auch als „customers“ bezeichnet werden. Dies entspricht den Benennungskonventionen in vielen Datenbanken, einschließlich SQL Server. In SQL Server ist das Standardverhalten, dass die Namen von Datenelementen nicht nur nach Groß- und Kleinschreibung unterschieden werden können.

Hinweis

Im Gegensatz zu Datasets beachten XML-Dokumente die Groß-/Kleinschreibung, sodass bei den Namen der in Schemas definierten Datenelemente die Groß-/Kleinschreibung beachtet wird. Das Schemenprotokoll ermöglicht es dem Schema beispielsweise, eine Tabelle mit dem Namen Customers und eine andere Tabelle mit dem Namen customers. Dies kann zu Namenskonflikten führen, wenn ein Schema, das Elemente enthält, die sich nur durch die Groß-/Kleinschreibung unterscheiden, zur Erstellung einer DataSet-Kklasse verwendet wird.

Die Groß-/Kleinschreibung kann jedoch ein Faktor bei der Interpretation von Daten innerhalb des Datasets sein. Wenn Sie beispielsweise Daten in einer Datasettabelle filtern, können die Suchkriterien unterschiedliche Ergebnisse zurückgeben, je nachdem, ob beim Vergleich die Groß-/Kleinschreibung beachtet wird. Sie können die Groß-/Kleinschreibung beim Filtern, Suchen und Sortieren steuern, indem Sie die Eigenschaft CaseSensitive des Datasets festlegen. Alle Tabellen im Dataset erben standardmäßig den Wert dieser Eigenschaft. (Sie können diese Eigenschaft für jede einzelne Tabelle überschreiben, indem Sie die Eigenschaft CaseSensitive der Tabelle festlegen.)

Suchen einer bestimmten Zeile in einer Datentabelle

So suchen Sie eine Zeile in einem typisierten Dataset mit einem Primärschlüsselwert

  • Rufen Sie zum Suchen einer Zeile die stark typisierte FindBy-Methode auf, die den Primärschlüssel der Tabelle verwendet.

    Im folgenden Beispiel ist die Spalte CustomerID der Primärschlüssel der Tabelle Customers. Dies bedeutet, dass die generierte FindBy-Methode FindByCustomerID ist. Das Beispiel zeigt, wie Sie einer Variablen mithilfe der generierten FindBy-Methode eine bestimmte DataRow zuweisen.

    NorthwindDataSet.CustomersRow customersRow = 
        northwindDataSet1.Customers.FindByCustomerID("ALFKI");
    

So suchen Sie eine Zeile in einem nicht typisierten Dataset mit einem Primärschlüsselwert

  • Rufen Sie die Find-Methode einer DataRowCollection-Sammlung auf, und übergeben Sie den Primärschlüssel als Parameter.

    Das folgende Beispiel zeigt, wie Sie eine neue Zeile mit dem Namen foundRow deklarieren und ihr den Rückgabewert der Find-Methode zuweisen. Wenn der Primärschlüssel gefunden wird, wird der Inhalt des Spaltenindex 1 in einem Meldungsfeld angezeigt.

    string s = "primaryKeyValue";
    DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s);
    
    if (foundRow != null) 
    {
        MessageBox.Show(foundRow[0].ToString());
    }
    else
    {
        MessageBox.Show("A row with the primary key of " + s + " could not be found");
    }
    

Suchen von Zeilen nach Spaltenwerten

So suchen Sie Zeilen basierend auf den Werten in einer beliebigen Spalte

  • Datentabellen werden mit der Select-Methode erstellt, die ein Array von DataRows basierend auf dem an die Select-Methode übergebenen Ausdruck zurückgibt. Weitere Informationen zum Erstellen gültiger Ausdrücke finden Sie im Abschnitt „Ausdruckssyntax“ der Seite über die Expression-Eigenschaft.

    Das folgende Beispiel zeigt, wie Sie die Select-Methode von DataTable verwenden, um nach bestimmten Zeilen zu suchen.

    DataRow[] foundRows;
    foundRows = dataSet1.Tables["Customers"].Select("CompanyName Like 'A%'");
    

Wenn Tabellen in einem Dataset miteinander verknüpft sind, kann ein DataRelation-Objekt die zugehörigen Datensätze in einer anderen Tabelle verfügbar machen. Beispielsweise kann ein Dataset, das die Tabellen Customers und Orders enthält, zur Verfügung gestellt werden.

Sie können ein DataRelation-Objekt verwenden, um zugehörige Datensätze zu suchen, indem Sie die GetChildRows-Methode einer DataRow in der übergeordneten Tabelle aufrufen. Diese Methode gibt ein Array verwandter untergeordneter Datensätze zurück. Alternativ können Sie die GetParentRow-Methode einer DataRow in der untergeordneten Tabelle aufrufen. Diese Methode gibt eine einzelne DataRow aus der übergeordneten Tabelle zurück.

Diese Seite enthält Beispiele für die Verwendung typisierter Datasets. Informationen zum Navigieren in Beziehungen in nicht typisierten Datasets finden Sie unter Navigieren in DataRelations.

Hinweis

Wenn Sie in einer Windows Forms-Anwendung arbeiten und die Datenbindungsfeatures zum Anzeigen von Daten verwenden, bietet das vom Designer generierte Formular möglicherweise genügend Funktionen für Ihre Anwendung. Weitere Informationen finden Sie unter Binden von Steuerelementen an Daten in Visual Studio. Siehe insbesondere Beziehungen in Datasets.

Die folgenden Codebeispiele veranschaulichen, wie Sie in typisierten Datasets nach oben und unten navigieren. In den Codebeispielen werden typisierte DataRows (NorthwindDataSet.OrdersRow) und die generierten FindByPrimaryKey (FindByCustomerID)-Methoden verwendet, um eine gewünschte Zeile zu finden und die zugehörigen Datensätze zurückzugeben. Die Beispiele werden nur ordnungsgemäß kompiliert und ausgeführt, wenn Sie Folgendes haben:

  • Eine Instanz eines Datasets mit dem Namen NorthwindDataSet mit einer Customers-Tabelle.

  • Eine Orders-Tabelle.

  • Eine Beziehung namens FK_Orders_Customers, die die beiden Tabellen einander zuordnen soll.

Darüber hinaus müssen beide Tabellen mit Daten gefüllt werden, damit Datensätze zurückgegeben werden können.

So geben Sie die untergeordneten Datensätze eines ausgewählten übergeordneten Datensatzes zurück

  • Rufen Sie die GetChildRows-Methode einer bestimmten Customers-Datenzeile auf, und geben Sie ein Array von Zeilen aus der Orders-Tabelle zurück:

    string custID = "ALFKI";
    NorthwindDataSet.OrdersRow[] orders;
    
    orders = (NorthwindDataSet.OrdersRow[])northwindDataSet.Customers.
        FindByCustomerID(custID).GetChildRows("FK_Orders_Customers");
    
    MessageBox.Show(orders.Length.ToString());
    

So geben Sie den übergeordneten Datensatz eines ausgewählten untergeordneten Datensatzes zurück

  • Rufen Sie die GetParentRow-Methode einer bestimmten Orders-Datenzeile auf, und geben Sie eine einzelne Zeile aus der Customers-Tabelle zurück:

    int orderID = 10707;
    NorthwindDataSet.CustomersRow customer;
    
    customer = (NorthwindDataSet.CustomersRow)northwindDataSet.Orders.
        FindByOrderID(orderID).GetParentRow("FK_Orders_Customers");
    
    MessageBox.Show(customer.CompanyName);