Sdílet prostřednictvím


Ověření dat v datových sadách

 

Publikováno: srpen 2016

Ověřování dat je proces ověření, která zadaných do datové objekty v souladu s omezeními v rámci schématu datovou sadu, jakož i pravidla stanovená pro vaši aplikaci. Ověřování dat před odesláním aktualizace do databáze je vhodné, která snižuje chyby, jakož i potenciální počet zpátečních cest mezi aplikací a databáze. Můžete potvrdit, že zapisovaných do datové sady dat platný sestavením ověření do datové sady, samotného. Datová sada můžete zkontrolovat data bez ohledu na to, jak se provádí aktualizaci – zda přímo z ovládacích prvků ve formuláři, v rámci komponenty, nebo jiným způsobem. Datová sada je součástí aplikace, je logickém místa k vytvoření ověření specifické pro aplikaci (na rozdíl od vytváření stejné kontroly do databáze back-end).

Navrhované umístění lze přidat ověřování do vaší aplikace je soubor částečné třídy datovou sadu. V Visual Basic nebo Visual C#, otevřete Návrháře DataSet a dvakrát klikněte na sloupec nebo tabulka, kterou chcete vytvořit ověření. Tato akce vytvoří automaticky ColumnChanging nebo RowChanging obslužná rutina události. Další informace naleznete v tématu Postupy: Ověřování dat během úprav sloupců, nebo Postupy: Ověřování dat během úprav řádků. Kompletní příklad naleznete v tématu Návod: Přidávání ověření do datové sady.

Ověřování dat

Ověření v rámci datové sady lze provést:

Existuje několik událostí, které jsou generovány DataTable objektu, když dochází k změnu v záznamu:

Ve výchozím nastavení, každou změnu ke sloupci, tedy vyvolává události čtyři: první ColumnChanging a ColumnChanged události pro konkrétní sloupec došlo ke změně a potom RowChanging a RowChanged události. Pokud více změn jsou prováděny na řádek, události, bude vyvolána pro každou změnu.

Poznámka

Řádek dat BeginEdit Metoda vypne RowChanging a RowChanged události po každé změně jednotlivé sloupce. V takovém případě není událost vyvolána až EndEdit byla volána metoda, když RowChanging a RowChanged události jsou vyvolány pouze jednou. Další informace naleznete v tématu Vypnutí omezení při naplňování datové sady.

Události, kterou zvolíte závisí na jak podrobné chcete ověření být. Pokud je důležité catch chybu ihned při změně sloupce, sestavení, ověření pomocí ColumnChanging událostí. Jinak použijte RowChanging událost, která může mít za následek zachycení několik chyb najednou. Kromě toho pokud vaše data strukturu tak ověření hodnoty jednoho sloupce na základě obsahu od jiného sloupce, pak by měl provést vaše ověření během RowChanging událostí.

Při aktualizaci záznamů DataTable objekt vyvolává události, které mohou reagovat na změny se vyskytnou a po provedení změn.

Pokud vaše aplikace používá typové datové sady, můžete vytvořit obslužné rutiny událostí silného typu. To přidá čtyři další typové události, které můžete vytvářet obslužné rutiny pro; dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting, and dataTableNameRowDeleted. Tyto obslužné rutiny událostí typované předat argument, který obsahuje názvy sloupců tabulky, které byl kód, které usnadňuje zápis a čtení.

Události aktualizace dat

Události Popis
ColumnChanging Mění se hodnota ve sloupci. Událost předává řádků a sloupců můžete spolu s navrhované novou hodnotu.
ColumnChanged Hodnota ve sloupci byl změněn. Událost předává řádků a sloupců můžete spolu s navržená hodnota.
RowChanging Změny provedené DataRow objektu se chystáte potvrzené zpět do datové sady. Pokud ještě volána BeginEdit Metoda, RowChanging je vyvolána událost pro každou změnu ke sloupci, ihned po ColumnChanging událost byla vyvolána. Pokud zavoláte BeginEdit před prováděním změn, RowChanging událost je aktivována pouze při volání EndEdit Metoda.

Událost předává řádek můžete a hodnotu určující, jaký typ akce (změnu, insert a tak dále) právě probíhá.
RowChanged Řádek byl změněn. Událost předává řádek můžete a hodnotu určující, jaký typ akce (změnu, insert a tak dále) právě probíhá.
RowDeleting Probíhá odstranění řádku. Událost předává řádek můžete a hodnotu určující, jaký typ akce (odstranit) právě probíhá.
RowDeleted Řádek byl odstraněn. Událost předává řádek můžete a hodnotu určující, jaký typ akce (odstranit) právě probíhá.

ColumnChanging, RowChanging, A RowDeleting události jsou vyvolány během procesu aktualizace. Tyto události můžete použít k ověření dat nebo provádět jiné typy zpracování. Vzhledem k tomu, že během tyto události jsou v procesu aktualizace, můžete zrušit aktualizaci vyvolání výjimky, což zabrání dokončení změny.

ColumnChanged, RowChanged, A RowDeleted události jsou události oznámení, které jsou vyvolány při aktualizace byla úspěšně dokončena. Tyto události jsou užitečné, pokud chcete provádět další akce v závislosti na úspěšné aktualizace.

Ověřování dat během úprav sloupců

Poznámka

Návrháře Dataset vytvoří částečné třídy, kde lze přidat logiku ověřování do datové sady. Dataset designer generované nebude odstranit nebo změnit libovolný kód v částečné třídy.

Můžete ověřit data při změně hodnoty ve sloupci data odpovědi na ColumnChanging událostí. Po vyvolání této události předá argument události (ProposedValue) obsahující navržený pro aktuální sloupec. Na základě obsahu z e.ProposedValue, můžete:

  • Přijměte navržená hodnota žádným způsobem.

  • Odmítnout navrhovaná hodnota nastavením chyba sloupce (SetColumnError) z v rámci obslužné rutiny události Změna sloupce.

  • Volitelně můžete použít ErrorProvider ovládací prvek zobrazí chybová zpráva pro uživatele. Další informace naleznete v tématu ErrorProvider – komponenta.

Ověření lze také provést během RowChanging událostí. Další informace naleznete v tématu Postupy: Ověřování dat během úprav řádků.

Ověřování dat během úprav řádků

Lze napsat kód k ověření, že každý sloupec, který chcete ověřit obsahuje data, která splňuje požadavky na aplikace. Pokud je navržená hodnota nemůže být přijata, nastavte sloupec k označení, že obsahuje chybu. Následující příklady nastavit sloupec Chyba při Quantity sloupec je 0 nebo menší. Obslužné rutiny událostí Změna řádku by mělo vypadat jako následující příklady.

Chcete-li ověřit data při řádek změny (Visual Basic)

  1. Otevřete datovou sadu v Návrháře Dataset. Další informace naleznete v tématu Postupy: Otevření datové sady v Návrháři DataSet.

  2. Dvakrát klikněte na záhlaví tabulky, kterou chcete ověřit. Tato akce vytvoří automaticky RowChanging obslužná rutina události DataTable v souboru je objekt dataset částečné třídy.

    Tip

    Dvakrát klikněte na možnost nalevo od názvu tabulky vytvořit obslužnou rutinu události Změna řádek. Pokud dvakrát klikněte na název tabulky, můžete upravit název tabulky.

            Private Sub Order_DetailsDataTable_Order_DetailsRowChanging(
                ByVal sender As System.Object, 
                ByVal e As Order_DetailsRowChangeEvent
              ) Handles Me.Order_DetailsRowChanging
    
                If CType(e.Row.Quantity, Short) <= 0 Then
                    e.Row.SetColumnError("Quantity", "Quantity must be greater than 0")
                Else
                    e.Row.SetColumnError("Quantity", "")
                End If
            End Sub
    

Ověření dat při změně řádku (C#)

  1. Otevřete datovou sadu v Návrháře Dataset. Další informace naleznete v tématu Postupy: Otevření datové sady v Návrháři DataSet.

  2. Dvakrát klikněte na záhlaví tabulky, kterou chcete ověřit. Tato akce vytvoří soubor částečné třídy pro DataTable.

    Poznámka

    Návrháře Dataset nevytváří automaticky obslužnou rutinu události pro RowChanging událostí. Je nutné vytvořit metodu ke zpracování RowChanging událostí a spouštět kód připojit událost v metodě inicializace v tabulce.

  3. Zkopírujte následující kód do částečné třídy:

    public override void EndInit()  
    {  
        base.EndInit();  
        Order_DetailsRowChanging += TestRowChangeEvent;  
    }  
    
    public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e)  
    {  
        if ((short)e.Row.Quantity <= 0)  
        {  
            e.Row.SetColumnError("Quantity", "Quantity must be greater than 0");  
        }  
        else  
        {  
            e.Row.SetColumnError("Quantity", "");  
        }  
    }  
    

Chcete-li načítání změněných řádků

Každý řádek v tabulce dat má RowState vlastnost, která uchovává informace o daném řádku pomocí hodnoty v aktuálním stavu DataRowState výčtu. Změněných řádků z tabulky dataset nebo dat lze vrátit voláním GetChanges metodu DataSet nebo DataTable. Můžete ověřit existují změny před volání GetChanges voláním HasChanges Metoda datové sady. Další informace o HasChanges, naleznete v části Postupy: Kontrola změněných řádků.

Poznámka

Po potvrzení změn do datové sady nebo data tabulky (pomocí volání AcceptChanges Metoda), GetChanges metoda nevrátí žádná data. Pokud aplikace potřebuje ke zpracování změněných řádků, musíte tak učinit před zavoláním AcceptChanges Metoda.

Volání GetChanges Metoda dataset nebo data tabulky vrátí novou tabulku dataset nebo data, která obsahuje pouze záznamy, které byly změněny. Pokud chcete získat pouze konkrétních záznamů – například pouze nové záznamy nebo pouze změněné záznamy – můžete předat hodnotu z DataRowState výčet jako parametr GetChanges Metoda.

Použití DataRowVersion výčtu pro přístup k různé verze řádku (například můžete chtít prozkoumat původní hodnoty v řádku před její zpracování.

Chcete-li získat všechny změněné záznamy z datové sady

  • Volání GetChanges Metoda datové sady.

    Následující příklad vytvoří novou datovou sadu volána changedRecords a naplní všechny změněné záznamy z jiného objektu dataset volána dataSet1.

                DataSet changedRecords = dataSet1.GetChanges();
    
            Dim changedRecords As DataSet = DataSet1.GetChanges()
    

Chcete-li získat všechny změněné záznamy z tabulky dat

  • Volání GetChanges Metoda DataTable.

    Následující příklad vytvoří novou tabulku dat nazvanou changedRecordsTable a naplní všechny změněné záznamy z jiné tabulky dat se nazývá dataTable1.

                DataTable changedRecordsTable = dataTable1.GetChanges();
    
            Dim changedRecordsTable As DataTable = dataTable1.GetChanges()
    

Chcete-li získat všechny záznamy, které mají konkrétní řádek stavu

  • Volání GetChanges Metoda datové sady nebo tabulky dat a průchod DataRowState Hodnota výčtu jako argument.

    Následující příklad ukazuje, jak vytvořit nové datové sady volána addedRecords a jeho naplnění pouze záznamy, které byly přidány do dataSet1 datové sady.

                DataSet addedRecords = dataSet1.GetChanges(DataRowState.Added);
    
            Dim addedRecords As DataSet = DataSet1.GetChanges(DataRowState.Added)
    
  • Následující příklad ukazuje, jak chcete zobrazit všechny záznamy nedávno přidán do Customers tabulky:

            private NorthwindDataSet.CustomersDataTable GetNewRecords()
            {
                return (NorthwindDataSet.CustomersDataTable)
                    northwindDataSet1.Customers.GetChanges(DataRowState.Added);
            }
    
        Private Function GetNewRecords() As NorthwindDataSet.CustomersDataTable
    
            Return CType(NorthwindDataSet1.Customers.GetChanges(Data.DataRowState.Added),
                NorthwindDataSet.CustomersDataTable)
        End Function
    

Přístup k původní verzi DataRow

Provedení změn na řádky dat, datová sada zachová původní (Original) a new (Current) verze řádku. Například před voláním AcceptChanges Metoda, vaše aplikace může přistupovat různé verze záznamu (definovaná ve DataRowVersion výčet) a odpovídajícím způsobem zpracovat změny.

Poznámka

Existují různé verze řádku pouze poté, co byl upraven a před zaznamenala AcceptChanges Metoda volána. Po AcceptChanges byla volána metoda, aktuální a původní verze jsou stejné.

Předávání DataRowVersion hodnotu společně s index sloupce (nebo název sloupce jako řetězec) vrací hodnotu z verze konkrétního řádku tohoto sloupce. Změněné sloupce je identifikován během ColumnChanging a ColumnChanged události, tak, aby se včas zkontrolovat, které se liší řádek verze pro účely ověření. Pokud máte dočasně pozastaveno omezení, tyto události nebude vyvolána a budete muset programově identifikovat sloupce, které se změnily. Můžete to provést pomocí iterace Columns shromažďování a porovnávání různých DataRowVersion hodnoty.

Chcete-li získat původní verzi záznamu

  • Přístup k hodnotě sloupce předáním DataRowVersion řádku, které chcete vrátit.

    Následující příklad ukazuje, jak můžete použít DataRowVersion hodnotu můžete získat původní hodnotu CompanyName v DataRow:

                string originalCompanyName;
                originalCompanyName = northwindDataSet1.Customers[0]
                    ["CompanyName", DataRowVersion.Original].ToString();
    
            Dim originalCompanyName = NorthwindDataSet1.Customers(0)(
               "CompanyName", DataRowVersion.Original).ToString()
    

Přístup k aktuální verzí DataRow

Chcete-li získat aktuální verze záznamu

  • Přístup k hodnotě sloupce a přidání parametru do indexu určující, která verze řádku, které chcete vrátit.

    Následující příklad ukazuje, jak můžete použít DataRowVersion hodnotu můžete získat aktuální hodnotu CompanyName v DataRow:

                string currentCompanyName;
                currentCompanyName = northwindDataSet1.Customers[0]
                    ["CompanyName", DataRowVersion.Current].ToString();
    
            Dim currentCompanyName = NorthwindDataSet1.Customers(0)(
                "CompanyName", DataRowVersion.Current).ToString()
    

Viz také

Vytváření a úpravy typovaných datových sad
Postupy: Připojování k datům v databázi
Postupy: Ověřování dat v ovládacím prvku Windows Forms DataGridView
Postupy: Zobrazení ikon chyby pro ověřování formuláře pomocí součásti Windows Forms ErrorProvider