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:
Spustit odesílání aktualizací databáze v rámci kódem try/catch bloku.
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.
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í:
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ů.
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
Vytvořit dočasné tři DataTables rozdílnými záznamy držet.
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í.
Potvrďte změny v databázi od objektu dataset.
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.
Ovládací prvky vazby na Data v aplikaci Visual Studio