Sdílet prostřednictvím


Jak: Dataset změny uložit do databáze

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 nebo datový adaptér.Adaptéru Update metoda aktualizace dat jedné tabulky a provede správný příkaz (INSERT, UPDATE nebo DELETE) na základě 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 Hierarchický přehled aktualizace.

[!POZNÁMKA]

Protože se pokouší aktualizovat zdroj dat s obsahem objektu dataset, může mít za následek 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. Spustit odesílání aktualizací databáze v rámci kódem try/catch bloku.

  2. Jestliže je výjimka zachycena, vyhledejte řádek dat, která způsobila chybu.Další informace naleznete v tématu Postup: vyhledejte řádky, které mají chyby.

  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 vlastnost, GetErrors metoda).

Ukládání dat do databáze

Volání Update metody TableAdapter nebo datový adaptér procházející název tabulky dat, který obsahuje hodnoty, které mají být zapsány do databáze.Další informace o ukládání dat z jedné datové tabulky zpět do databáze, viz Názorný postup: Ukládání dat do databáze (jedna tabulka).

Aktualizace databáze dataset TableAdapter pomocí

  • Uzavřete TableAdapter.Update metoda uvnitř try/catch bloku.Následující příklad ukazuje aktualizaci s obsahem se 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");
    }
    

Aktualizace databáze dataset datový adaptér

  • Uzavřete DataAdapter.Update metoda uvnitř try/catch bloku.Následující příklad ukazuje, jak pokus o aktualizaci zdroje dat s obsahem Table1 v DataSet1.

    Try
        SqlDataAdapter1.Update(Dataset1.Tables("Table1"))
    
    Catch x As Exception
        ' Error during Update, add code to locate error, reconcile 
        ' and try to update again.
    End Try
    
    try
    {
        SqlDataAdapter1.Update(Dataset1.Tables["Table1"]);
    }
    catch (Exception e)
    {
        // Error during Update, add code to locate error, reconcile 
        // and try to update again.
    }
    

Aktualizace dvou tabulek v objektu Dataset

Při aktualizaci tabulek v objektu dataset je důležité aktualizace ve správném pořadí 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ů.

Podrobné informace o ukládání dat z více tabulek, viz Názorný postup: Ukládání dat do databáze (více tabulek).

Pokud aktualizujete dvě nebo více souvisejících tabulek, by měl zahrnovat všechny aktualizace logika 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 Performing Transactions.

Aktualizovat TableAdapter pomocí dvou tabulek

  1. Vytvořit dočasné tři DataTables rozdílnými záznamy držet.

  2. Volání Update metoda pro každý dílčí řádky v rámci try/catch bloku.Pokud dojde k chybám aktualizace, je doporučený postup větví a jejich řešení.

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

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

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

Aktualizovat datový adaptér pomocí dvou tabulek

  • Volání Update metoda každý datový adaptér.

    Následující příklad ukazuje, jak aktualizovat zdroj dat objekt dataset, který obsahuje související tabulky.Podle výše uvedených posloupnost tří dočasné DataTablebude vytvořena s obsahují rozdílné záznamy.Pak bude Update pro každý dílčí řádky bude volána metoda v rámci try/catch bloku.Pokud dojde k chybám aktualizace, je doporučený postup větví a jejich řešení.Objekt dataset potom potvrdí změny.Nakonec vyřazení dočasná data tabulky uvolnit prostředky.

    Private Sub UpdateDB()
        Dim DeletedChildRecords As DataTable =
            dsNorthwind1.Orders.GetChanges(DataRowState.Deleted)
    
        Dim NewChildRecords As DataTable =
            dsNorthwind1.Orders.GetChanges(DataRowState.Added)
    
        Dim ModifiedChildRecords As DataTable =
            dsNorthwind1.Orders.GetChanges(DataRowState.Modified)
    
        Try
            If Not DeletedChildRecords Is Nothing Then
                daOrders.Update(DeletedChildRecords)
            End If
    
            daCustomers.Update(dsNorthwind1, "Customers")
    
            If Not NewChildRecords Is Nothing Then
                daOrders.Update(NewChildRecords)
            End If
    
            If Not ModifiedChildRecords Is Nothing Then
                daOrders.Update(ModifiedChildRecords)
            End If
    
            dsNorthwind1.AcceptChanges()
    
        Catch ex As Exception
            ' Update error, resolve and try again
    
        Finally
            If Not DeletedChildRecords Is Nothing Then
                DeletedChildRecords.Dispose()
            End If
    
            If Not NewChildRecords Is Nothing Then
                NewChildRecords.Dispose()
            End If
    
            If Not ModifiedChildRecords Is Nothing Then
                ModifiedChildRecords.Dispose()
            End If
        End Try
    End Sub
    
    void UpdateDB()
    {
        System.Data.DataTable DeletedChildRecords = 
            dsNorthwind1.Orders.GetChanges(System.Data.DataRowState.Deleted);
    
        System.Data.DataTable NewChildRecords = 
            dsNorthwind1.Orders.GetChanges(System.Data.DataRowState.Added);
    
        System.Data.DataTable ModifiedChildRecords = 
            dsNorthwind1.Orders.GetChanges(System.Data.DataRowState.Modified);
    
        try
        {
            if (DeletedChildRecords != null)
            {
                daOrders.Update(DeletedChildRecords);
            }
            if (NewChildRecords != null)
            {
                daOrders.Update(NewChildRecords);
            }
            if (ModifiedChildRecords != null)
            {
                daOrders.Update(ModifiedChildRecords);
            }
    
            dsNorthwind1.AcceptChanges();
        }
    
        catch (Exception ex)
        {
            // Update error, resolve and try again
        }
    
        finally
        {
            if (DeletedChildRecords != null)
            {
                DeletedChildRecords.Dispose();
            }
            if (NewChildRecords != null)
            {
                NewChildRecords.Dispose();
            }
            if (ModifiedChildRecords != null)
            {
                ModifiedChildRecords.Dispose();
            }
        }
    }
    

Viz také

Koncepty

Novinky ve vývoji datových aplikací v sadě Visual Studio 2012

Vazba na Data v aplikaci Visual Studio model Windows Forms prvky

Příprava aplikace pro příjem dat.

Načítání dat do aplikace

Ovládací prvky vazby na Data v aplikaci Visual Studio

Data v aplikaci pro úpravy

Ověření dat

Ukládání dat

Další zdroje

Data návody

Připojení k datům v aplikaci Visual Studio