Sdílet prostřednictvím


Dotazování datových sad v aplikacích .NET Framework

Poznámka:

Datové sady a související třídy jsou staršími technologiemi rozhraní .NET Framework z počátku 2000, které aplikacím umožňují pracovat s daty v paměti, zatímco aplikace jsou odpojené od databáze. Jsou zvláště užitečné pro aplikace, které uživatelům umožňují upravovat data a uchovávat změny zpět do databáze. I když se datové sady ukázaly jako velmi úspěšná technologie, doporučujeme, aby nové aplikace .NET používaly Entity Framework Core. Entity Framework poskytuje přirozenější způsob práce s tabulkovými daty jako objektovými modely a má jednodušší programovací rozhraní.

Pokud chcete vyhledat konkrétní záznamy v datové sadě, použijte FindBy metodu v tabulce DataTable, napište vlastní příkaz foreach pro smyčku přes kolekci Řádků tabulky nebo použijte LINQ to DataSet.

Citlivost velikosti velkých a malých písmen datové sady

Názvy tabulek a sloupců v datové sadě ve výchozím nastavení nerozlišují malá a velká písmena – to znamená, že tabulka v datové sadě s názvem Zákazníci se také může označovat jako "Zákazníci". To odpovídá konvencím vytváření názvů v mnoha databázích, včetně SQL Serveru. Výchozí chování SQL Serveru spočívá v tom, že názvy datových prvků nelze rozlišovat pouze v případě.

Poznámka:

Na rozdíl od datových sad rozlišují dokumenty XML malá a velká písmena, takže názvy datových prvků definovaných ve schématech rozlišují malá a velká písmena. Například protokol schématu umožňuje schématu definovat tabulku volanou Customers a jinou tabulku s názvem customers. To může vést ke kolizi názvů, pokud se ke generování třídy datové sady používá schéma obsahující prvky, které se liší pouze případem.

Citlivost malých a velkých písmen ale může být faktorem, jakým se data interpretují v datové sadě. Pokud například filtrujete data v tabulce datové sady, můžou kritéria hledání vracet různé výsledky v závislosti na tom, jestli je porovnání citlivé na malá a velká písmena. Nastavením vlastnosti datové sady CaseSensitive můžete řídit citlivost písmen filtrování, vyhledávání a řazení. Všechny tabulky v datové sadě ve výchozím nastavení dědí hodnotu této vlastnosti. (Tuto vlastnost můžete přepsat pro každou jednotlivou tabulku nastavením vlastnosti tabulky CaseSensitive .)

Vyhledání konkrétního řádku v tabulce dat

Vyhledání řádku v zadané datové sadě s hodnotou primárního klíče

  • Pokud chcete vyhledat řádek, zavolejte metodu silného typu FindBy , která používá primární klíč tabulky.

    V následujícím příkladu CustomerID je sloupec primárním klíčem Customers tabulky. To znamená, že vygenerovaná FindBy metoda je FindByCustomerID. Příklad ukazuje, jak přiřadit konkrétní DataRow proměnné pomocí vygenerované FindBy metody.

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

Vyhledání řádku v nezatypované datové sadě s hodnotou primárního klíče

  • Find Zavolejte metodu DataRowCollection kolekce a předejte primární klíč jako parametr.

    Následující příklad ukazuje, jak deklarovat nový řádek volaný foundRow a přiřadit ji návratovou Find hodnotu metody. Pokud se primární klíč najde, obsah indexu sloupce 1 se zobrazí v poli se zprávou.

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

Vyhledání řádků podle hodnot sloupců

Vyhledání řádků na základě hodnot v libovolném sloupci

  • Datové tabulky se vytvoří pomocí Select metody, která vrátí pole DataRows na základě výrazu předaného metodě Select . Další informace o vytváření platných výrazů naleznete v části Syntaxe výrazu stránky o Expression vlastnosti.

    Následující příklad ukazuje, jak použít Select metodu DataTable vyhledání konkrétních řádků.

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

Když jsou tabulky v datové sadě související, DataRelation může objekt zpřístupnit související záznamy v jiné tabulce. Můžete například zpřístupnit datovou sadu obsahující Customers a Orders tabulky.

Objekt můžete použít DataRelation k vyhledání souvisejících záznamů voláním GetChildRows metody DataRow v nadřazené tabulce. Tato metoda vrátí pole souvisejících podřízených záznamů. Nebo můžete volat metodu GetParentRowDataRow v podřízené tabulce. Tato metoda vrátí jednu DataRow z nadřazené tabulky.

Tato stránka obsahuje příklady použití typových datových sad. Informace o navigaci mezi relacemi v netypových datových sadách najdete v tématu Navigace v datových relacích.

Poznámka:

Pokud pracujete v aplikaci model Windows Forms a používáte funkce datové vazby k zobrazení dat, může formulář vygenerovaný návrhářem poskytovat dostatek funkcí pro vaši aplikaci. Další informace naleznete v tématu Vytvoření vazby ovládacích prvků k datům v sadě Visual Studio. Konkrétně se podívejte na relace v datových sadách.

Následující příklady kódu ukazují, jak procházet relace nahoru a dolů v typed datasets. Příklady kódu používají typy DataRows (NorthwindDataSet.OrdersRow) a vygenerované metody FindByPrimaryKey (FindByCustomerID) k vyhledání požadovaného řádku a vrácení souvisejících záznamů. Příklady se kompilují a správně spouštějí jenom v případě, že máte:

  • Instance datové sady s názvem NorthwindDataSet s tabulkou Customers

  • Tabulka Orders .

  • Relace s názvem FK_Orders_Customerssouvisející se dvěma tabulkami.

Kromě toho musí být obě tabulky vyplněné daty, aby se vrátily všechny záznamy.

Vrácení podřízených záznamů vybraného nadřazeného záznamu

  • GetChildRows Volání metody konkrétního Customers datového řádku a vrácení pole řádků z Orders tabulky:

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

Vrácení nadřazeného záznamu vybraného podřízeného záznamu

  • GetParentRow Volání metody konkrétního Orders řádku dat a vrácení jednoho řádku z Customers tabulky:

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