Delen via


Query's uitvoeren op gegevenssets in .NET Framework-toepassingen

Opmerking

De DataSet klassen en gerelateerde klassen zijn verouderde .NET Framework-technologieën uit het begin van de jaren 2000 waarmee toepassingen met gegevens in het geheugen kunnen werken terwijl de apps losgekoppeld zijn van de database. De technologieën zijn vooral handig voor apps waarmee gebruikers gegevens kunnen wijzigen en de wijzigingen weer kunnen behouden in de database. Hoewel gegevenssets een bewezen succesvolle technologie zijn, is de aanbevolen aanpak voor nieuwe .NET-toepassingen het gebruik van Entity Framework Core. Entity Framework biedt een natuurlijkere manier om met tabelgegevens te werken als objectmodellen en heeft een eenvoudigere programmeerinterface.

Als u wilt zoeken naar specifieke records in een gegevensset, gebruikt u de FindBy methode in de gegevenstabel, schrijft u uw eigen foreach-instructie om de verzameling Rijen van de tabel te doorlopen of gebruikt u LINQ naar DataSet.

Gevoeligheid voor hoofdlettergebruik van datasets

In een gegevensset zijn tabel- en kolomnamen standaard niet hoofdlettergevoelig. Dat wil zeggen dat een tabel in een gegevensset met de naam 'Klanten' ook wel 'Klanten' kan worden genoemd. Dit komt overeen met de naamconventies in veel databases, waaronder SQL Server. In SQL Server is het standaardgedrag dat de namen van gegevenselementen niet alleen per geval kunnen worden onderscheiden.

Opmerking

In tegenstelling tot gegevenssets zijn XML-documenten hoofdlettergevoelig, dus de namen van gegevenselementen die in schema's zijn gedefinieerd, zijn hoofdlettergevoelig. Met het schemaprotocol kan het schema bijvoorbeeld een tabel met de naam Customers en een andere tabel definiëren.customers Dit kan leiden tot naamconflicten wanneer een schema dat elementen bevat die alleen per geval verschillen, wordt gebruikt om een gegevenssetklasse te genereren.

Hoofdlettergevoeligheid kan echter een factor zijn in hoe gegevens binnen de gegevensset worden geïnterpreteerd. Als u bijvoorbeeld gegevens in een dataset-tabel filtert, kunnen de zoekcriteria verschillende resultaten retourneren, afhankelijk van de vraag of de vergelijking hoofdlettergevoelig is. U kunt de hoofdlettergevoeligheid van filteren, zoeken en sorteren bepalen door de eigenschap van CaseSensitive de gegevensset in te stellen. Alle tabellen in de gegevensset nemen standaard de waarde van deze eigenschap over. (U kunt deze eigenschap voor elke afzonderlijke tabel overschrijven door de eigenschap van CaseSensitive de tabel in te stellen.)

Een specifieke rij in een gegevenstabel zoeken

Een rij zoeken in een getypte gegevensset met een primaire-sleutelwaarde

  • Als u een rij wilt zoeken, roept u de sterk getypte FindBy methode aan die gebruikmaakt van de primaire sleutel van de tabel.

    In het volgende voorbeeld is de CustomerID kolom de primaire sleutel van de Customers tabel. Dit betekent dat de gegenereerde FindBy methode is FindByCustomerID. In het voorbeeld ziet u hoe u een specifieke DataRow aan een variabele toewijst met behulp van de gegenereerde FindBy methode.

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

Een rij zoeken in een niet-getypte gegevensset met een primaire-sleutelwaarde

  • Roep de Find methode van een DataRowCollection verzameling aan en geef de primaire sleutel door als parameter.

    In het volgende voorbeeld ziet u hoe u een nieuwe rij foundRow declareert en toewijst aan de retourwaarde van de Find methode. Als de primaire sleutel wordt gevonden, wordt de inhoud van kolomindex 1 weergegeven in een berichtvak.

    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");
    }
    

Rijen zoeken op kolomwaarden

Rijen zoeken op basis van de waarden in elke kolom

  • Gegevenstabellen worden gemaakt met de Select methode, die een array van DataRows retourneert op basis van de expressie die aan de Select methode wordt doorgegeven. Zie de sectie Expressiesyntaxis van de pagina over de Expression eigenschap voor meer informatie over het maken van geldige expressies.

    In het volgende voorbeeld ziet u hoe u de Select methode van de DataTable methode gebruikt om specifieke rijen te zoeken.

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

Wanneer tabellen in een gegevensset zijn gerelateerd, kan een DataRelation object de gerelateerde records beschikbaar maken in een andere tabel. Een gegevensset met Customers tabellen Orders kan bijvoorbeeld beschikbaar worden gesteld.

U kunt een DataRelation object gebruiken om gerelateerde records te zoeken door de GetChildRows methode van een DataRow in de bovenliggende tabel aan te roepen. Deze methode retourneert een array met gerelateerde kindrecords. U kunt ook de GetParentRow methode van een DataRow in de subtabel aanroepen. Deze methode retourneert één DataRow uit de bovenliggende tabel.

Deze pagina bevat voorbeelden met behulp van getypte gegevenssets. Voor informatie over het navigeren door relaties in niet-getypeerde datasets, zie DataRelations navigeren.

Opmerking

Als u in een Windows Forms-toepassing werkt en de functies voor gegevensbinding gebruikt om gegevens weer te geven, biedt het door de ontwerper gegenereerde formulier mogelijk voldoende functionaliteit voor uw toepassing. Zie Besturingselementen binden aan gegevens in Visual Studio voor meer informatie. Zie met name relaties in gegevenssets.

In de volgende codevoorbeelden ziet u hoe u omhoog en omlaag navigeert in getypte gegevenssets. In de codevoorbeelden worden getypte DataRows (NorthwindDataSet.OrdersRow) en de gegenereerde Methoden FindByPrimaryKey (FindByCustomerID) gebruikt om een gewenste rij te vinden en de gerelateerde records te retourneren. De voorbeelden worden alleen gecompileerd en correct uitgevoerd als u het volgende hebt:

  • Een exemplaar van een gegevensset met de naam NorthwindDataSet met een Customers tabel.

  • Een Orders tabel.

  • Een relatie genaamd FK_Orders_Customers die de twee tabellen verbindt.

Bovendien moeten beide tabellen worden gevuld met gegevens voor alle records die moeten worden geretourneerd.

Om de onderliggende records van een geselecteerde ouderrecord te retourneren

  • Roep de GetChildRows methode van een specifieke Customers gegevensrij aan en retourneer een matrix met rijen uit de Orders tabel:

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

Het ouderrecord van een geselecteerd kindrecord retourneren

  • Roep de GetParentRow methode van een specifieke Orders gegevensrij aan en retourneer één rij uit de Customers tabel:

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