Sdílet prostřednictvím


Postupy: Aktualizace dat pomocí TableAdapter

Po upravit data ve vaší dataset a ověřeno pravděpodobně chcete odeslat aktualizovaná data zpět do databáze.Chcete-li odeslat změněná data do databáze, zavolejte Update metodu TableAdapter.Adaptéru Update bude aktualizace dat jedné tabulky a správný příkaz (INSERT, UPDATE nebo DELETE) na základě metody RowState každý řádek dat v tabulce.Při ukládání dat v tabulkách, Visual Studio obsahuje součást TableAdapterManager, která usnadní provádění uloží ve správném pořadí na základě omezení cizího klíče v databázi definována.Další informace naleznete v tématu Přehled hierarchické aktualizace.

[!POZNÁMKA]

Protože se pokouší aktualizovat zdroj dat s obsahem objektu dataset může způsobit chyby, měli byste umístit kód, který volá adaptéru Update metoda uvnitř try/catch bloku.

Přesný postup při aktualizaci zdroje dat mohou lišit v závislosti na obchodní potřeby, ale aplikace by měla obsahovat následující kroky:

  1. Volání adaptéru Update metodu try/catch bloku.

  2. Jestliže je výjimka zachycena, vyhledejte řádek dat, která způsobila chybu.Další informace naleznete v tématu Postupy: Vyhledání řádků s chybami.

  3. Odsouhlasit problém v datech řádku (programově, pokud je to možné, nebo neplatný řádek prezentuje uživateli změnu) a potom o pokusí znovu aktualizace (HasErrors, GetErrors).

Ukládání dat do databáze

Volání Update metoda TableAdapter, předávání název tabulky dat, který obsahuje hodnoty, které mají být zapsány do databáze.

Aktualizovat databázi, která obsahuje objekt dataset pomocí TableAdapter

  • Uzavřete adaptéru Update metodu try/catch bloku.Následující příklad ukazuje, jak se v rámci aktualizace try/catch bloku s obsahem Customers v tabulce NorthwindDataSet.

    Try 
        Me.Validate()
        Me.CustomersBindingSource.EndEdit()
        Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
        MsgBox("Update successful")
    
    Catch ex As Exception
        MsgBox("Update failed")
    End Try
    
    try
    {
        this.Validate();
        this.customersBindingSource.EndEdit();
        this.customersTableAdapter.Update(this.northwindDataSet.Customers);
        MessageBox.Show("Update successful");
    }
    catch (System.Exception ex)
    {
        MessageBox.Show("Update failed");
    }
    

Aktualizaci dvou tabulek v objektu Dataset s TableAdapter

Při aktualizaci tabulek v objektu dataset je nutné aktualizovat ve správném pořadí s cílem snížit pravděpodobnost porušení omezení referenční integrity.Pořadí spuštění příkazu bude následovat také indexy DataRowCollection v objektu dataset.Chcete-li zabránit závažné chyby integrity dat, nejlepší je aktualizovat databázi v následujícím pořadí:

  1. Podřízené tabulky: odstraňování záznamů.

  2. Nadřazená tabulka: vložení, aktualizaci a odstraňování záznamů.

  3. Podřízená tabulka: vkládání a aktualizace záznamů.

    [!POZNÁMKA]

    Pokud aktualizujete dvě nebo více souvisejících tabulek, byste měli zahrnout logika aktualizace v rámci transakce.Transakce je proces, který zajišťuje všechny související změny v databázi jsou úspěšné před provedením změny.Další informace naleznete v tématu Transactions and Concurrency.

Aktualizovat TableAdapter pomocí dvou tabulek

  1. Vytvořte tři dočasné datové tabulky pro různé záznamy.

  2. Volání Update metoda pro každý dílčí řádky z try/catch bloku.Pokud dojde k aktualizaci chyby, by větví a jejich řešení.

  3. Potvrďte změny v databázi.

  4. Dočasná data tabulky uvolnit prostředky nakládat.

    Následující příklad ukazuje, jak aktualizovat zdroj dat objekt dataset, který obsahuje související tabulky.

    Private Sub UpdateDB()
        Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable =
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
        Dim newChildRecords As NorthwindDataSet.OrdersDataTable =
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
        Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable =
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
        Try 
            If deletedChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(deletedChildRecords)
            End If
    
            CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
            If newChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(newChildRecords)
            End If 
    
            If modifiedChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(modifiedChildRecords)
            End If
    
            NorthwindDataSet.AcceptChanges()
    
        Catch ex As Exception
            MessageBox.Show("An error occurred during the update process")
            ' Add code to handle error here. 
    
        Finally 
            If deletedChildRecords IsNot Nothing Then
                deletedChildRecords.Dispose()
            End If 
    
            If newChildRecords IsNot Nothing Then
                newChildRecords.Dispose()
            End If 
    
            If modifiedChildRecords IsNot Nothing Then
                modifiedChildRecords.Dispose()
            End If 
    
        End Try 
    End Sub
    
    void UpdateDB()
    {
        NorthwindDataSet.OrdersDataTable deletedChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
        NorthwindDataSet.OrdersDataTable newChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
        NorthwindDataSet.OrdersDataTable modifiedChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
        try
        {
            if (deletedChildRecords != null)
            {
                ordersTableAdapter.Update(deletedChildRecords);
            }
    
            customersTableAdapter.Update(northwindDataSet.Customers);
    
            if (newChildRecords != null)
            {
                ordersTableAdapter.Update(newChildRecords);
            }
    
            if (modifiedChildRecords != null)
            {
                ordersTableAdapter.Update(modifiedChildRecords);
            }
    
            northwindDataSet.AcceptChanges();
        }
    
        catch (Exception ex)
        {
            MessageBox.Show("An error occurred during the update process");
            // Add code to handle error here.
        }
    
        finally
        {
            if (deletedChildRecords != null)
            {
                deletedChildRecords.Dispose();
            }
            if (newChildRecords != null)
            {
                newChildRecords.Dispose();
            }
            if (modifiedChildRecords != null)
            {
                modifiedChildRecords.Dispose();
            }
        }
    }
    

Viz také

Koncepty

TableAdapter – přehled

Vázání ovládacích prvků Windows Forms k datům v sadě Visual Studio

Příprava vaší aplikace k příjmu dat

Načítání dat do vaší aplikace

Vázání ovládacích prvků k datům v sadě Visual Studio

Upravování dat ve vaší aplikaci

Ověřování dat

Ukládání dat

Další zdroje

Návody k datům

Připojení k datům v sadě Visual Studio