Udostępnij za pośrednictwem


Wykonywanie zapytań dotyczących zestawów danych w aplikacjach .NET Framework

Uwaga

Zestawy danych i powiązane klasy to starsze technologie .NET Framework z początku 2000 roku, które umożliwiają aplikacjom pracę z danymi w pamięci, gdy aplikacje są odłączone od bazy danych. Technologie te są szczególnie przydatne w przypadku aplikacji, które umożliwiają użytkownikom modyfikowanie danych i utrwalanie zmian z powrotem w bazie danych. Mimo że zestawy danych okazały się bardzo udaną technologią, zalecamy, aby nowe aplikacje platformy .NET używały platformy Entity Framework Core. Program Entity Framework zapewnia bardziej naturalny sposób pracy z danymi tabelarycznymi jako modelami obiektów i ma prostszy interfejs programowania.

Aby wyszukać określone rekordy w zestawie danych, użyj FindBy metody w tabeli DataTable, napisz własną instrukcję foreach, aby utworzyć pętlę w kolekcji Wiersze tabeli lub użyć linQ to DataSet.

Ważność wielkości liter zestawu danych

W zestawie danych nazwy tabel i kolumn są domyślnie niewrażliwe na wielkość liter — czyli tabelę w zestawie danych o nazwie "Klienci" można również określać jako "Klienci". Jest to zgodne z konwencjami nazewnictwa w wielu bazach danych, w tym z programem SQL Server. W programie SQL Server domyślne zachowanie polega na tym, że nazwy elementów danych nie mogą być rozróżniane tylko według wielkości liter.

Uwaga

W przeciwieństwie do zestawów danych dokumenty XML są uwzględniane wielkości liter, więc nazwy elementów danych zdefiniowanych w schematach są uwzględniane wielkości liter. Na przykład protokół schematu umożliwia zdefiniowanie tabeli o nazwie Customers i innej tabeli o nazwie customers. Może to spowodować kolizje nazw, gdy schemat zawierający elementy, które różnią się tylko wielkością liter, jest używany do generowania klasy zestawu danych.

Jednak czułość wielkości liter może być czynnikiem, w jaki sposób dane są interpretowane w zestawie danych. Na przykład w przypadku filtrowania danych w tabeli zestawu danych kryteria wyszukiwania mogą zwracać różne wyniki w zależności od tego, czy w porównaniu jest uwzględniana wielkość liter. Można kontrolować wielkość liter filtrowania, wyszukiwania i sortowania, ustawiając właściwość zestawu danych CaseSensitive . Wszystkie tabele w zestawie danych dziedziczą wartość tej właściwości domyślnie. (Tę właściwość można zastąpić dla każdej tabeli, ustawiając właściwość tabeli CaseSensitive ).

Lokalizowanie określonego wiersza w tabeli danych

Aby znaleźć wiersz w typowanym zestawie danych z wartością klucza podstawowego

  • Aby zlokalizować wiersz, wywołaj metodę silnie typizowana FindBy , która używa klucza podstawowego tabeli.

    W poniższym przykładzie kolumna CustomerID jest kluczem Customers podstawowym tabeli. Oznacza to, że wygenerowana FindBy metoda to FindByCustomerID. W przykładzie pokazano, jak przypisać określony DataRow element do zmiennej przy użyciu metody wygenerowanej FindBy .

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

Aby znaleźć wiersz w nietypowym zestawie danych z wartością klucza podstawowego

  • Wywołaj Find metodę DataRowCollection kolekcji, przekazując klucz podstawowy jako parametr.

    W poniższym przykładzie pokazano, jak zadeklarować nowy wiersz o nazwie foundRow i przypisać mu zwracaną wartość Find metody. Jeśli klucz podstawowy zostanie znaleziony, zawartość indeksu kolumny 1 zostanie wyświetlona w oknie komunikatu.

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

Znajdowanie wierszy według wartości kolumn

Aby znaleźć wiersze na podstawie wartości w dowolnej kolumnie

  • Tabele danych są tworzone za pomocą Select metody , która zwraca tablicę DataRows na podstawie wyrażenia przekazanego Select do metody. Aby uzyskać więcej informacji na temat tworzenia prawidłowych wyrażeń, zobacz sekcję "Składnia wyrażeń" na stronie dotyczącej Expression właściwości.

    W poniższym przykładzie pokazano, jak użyć Select metody w DataTable celu zlokalizowania określonych wierszy.

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

Gdy tabele w zestawie danych są powiązane, DataRelation obiekt może udostępnić powiązane rekordy w innej tabeli. Na przykład można udostępnić zestaw danych zawierający Customers tabele i Orders .

Za pomocą DataRelation obiektu można zlokalizować powiązane rekordy, wywołując GetChildRows metodę DataRow w tabeli nadrzędnej. Ta metoda zwraca tablicę powiązanych rekordów podrzędnych. Możesz też wywołać metodę GetParentRow elementu DataRow w tabeli podrzędnej. Ta metoda zwraca jedną DataRow z tabeli nadrzędnej.

Ta strona zawiera przykłady użycia typowanych zestawów danych. Aby uzyskać informacje na temat nawigowania po relacjach w nietypowych zestawach danych, zobacz Nawigowanie po danychRelacje.

Uwaga

Jeśli pracujesz w aplikacji Windows Forms i używasz funkcji powiązania danych do wyświetlania danych, formularz wygenerowany przez projektanta może zapewnić wystarczającą funkcjonalność aplikacji. Aby uzyskać więcej informacji, zobacz Wiązanie kontrolek z danymi w programie Visual Studio. W szczególności zobacz Relacje w zestawach danych.

W poniższych przykładach kodu pokazano, jak przechodzić w górę i w dół relacji w typowanych zestawach danych. Przykłady kodu używają typowanych DataRows (NorthwindDataSet.OrdersRow) i wygenerowanych metod FindByPrimaryKey (FindByCustomerID), aby zlokalizować żądany wiersz i zwrócić powiązane rekordy. Przykłady są kompilowane i uruchamiane poprawnie tylko wtedy, gdy:

  • Wystąpienie zestawu danych o nazwie NorthwindDataSet z tabelą Customers .

  • Tabela Orders .

  • Relacja o nazwie FK_Orders_Customers odnoszącej się do dwóch tabel.

Ponadto obie tabele muszą być wypełnione danymi, aby zwracane były wszystkie rekordy.

Aby zwrócić rekordy podrzędne wybranego rekordu nadrzędnego

  • Wywołaj metodę GetChildRows określonego Customers wiersza danych i zwróć tablicę wierszy z Orders tabeli:

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

Aby zwrócić rekord nadrzędny wybranego rekordu podrzędnego

  • Wywołaj metodę GetParentRow określonego Orders wiersza danych i zwróć pojedynczy wiersz z Customers tabeli:

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