Jazyk

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

Poznámka:

Třídy DataSet a související třídy jsou starší technologie rozhraní .NET Framework z počátku 2000, které umožňují aplikacím pracovat s daty v paměti, zatímco aplikace jsou odpojeny od databáze. Tyto technologie 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ž jsou datové sady ověřenou úspěšnou technologií, doporučeným přístupem pro nové aplikace .NET je použití 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 na velikost 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 velikost písmen, a tudíž i názvy datových prvků ve schématech jsou citlivé na velikost písmen. 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.

Rozlišování malých a velkých písmen může ovlivnit, jak se data interpretují v datové sadě. Pokud například filtrujete data v tabulce datové sady, mohou vyhledávací kritéria vracet různé výsledky v závislosti na tom, zda je porovnání citlivé na velikost písmen. 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 sloupec CustomerID je primárním klíčem tabulky Customers. 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

  • Zavolejte metodu Find kolekce DataRowCollection, 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' na stránce o vlastnosti Expression.

    Následující příklad ukazuje, jak použít Select metodu DataTable, pro 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.

Můžete použít objekt DataRelation k vyhledání souvisejících záznamů voláním metody GetChildRows v nadřazené tabulce. Tato metoda vrátí pole souvisejících podřízených záznamů. Nebo můžete zavolat 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 Windows Forms a používáte funkce datové vazby k zobrazení dat, může formulář vygenerovaný návrhářem poskytnout 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 směrem nahoru a dolů v typovaných datových sadách. 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_Customers související se dvěma tabulkami.

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

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

  • Zavolejte metodu GetChildRows konkrétního Customers datového řádku a vraťte 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

  • Zavolejte metodu určeného Orders datového řádku a vraťte jeden řádek z tabulky Customers:

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