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:
Volání adaptéru Update metodu try/catch bloku.
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.
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í:
Podřízené tabulky: odstraňování záznamů.
Nadřazená tabulka: vložení, aktualizaci a odstraňování záznamů.
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
Vytvořte tři dočasné datové tabulky pro různé záznamy.
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í.
Potvrďte změny v databázi.
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
Vázání ovládacích prvků Windows Forms k datům v sadě Visual Studio
Příprava vaší aplikace k příjmu dat
Vázání ovládacích prvků k datům v sadě Visual Studio
Upravování dat ve vaší aplikaci