將資料儲存至資料庫(多個資料表) - Visual Studio (Windows)

文章推薦指數: 80 %
投票人數:10人

... 兩個關聯資料表的資料,並示範如何編輯記錄,以及將變更儲存回資料庫。

... 本逐步解說使用SQL Server Express LocalDB 和Northwind 範例資料庫。

跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 語言 儲存 編輯 共用 Twitter LinkedIn Facebook 電子郵件 WeChat 目錄 語言 將資料儲存至資料庫(多個資料表) 09/14/2021 g o O i 本文內容 在應用程式的開發過程中,最常見的一個情節是在Windows應用程式的表單上顯示資料並編輯資料,以及將更新的資料傳送回資料庫。

此逐步解說會建立表單,以顯示來自兩個關聯資料表的資料,並示範如何編輯記錄,以及將變更儲存回資料庫。

此範例使用Northwind範例資料庫的Customers和Orders資料表。

您可以透過呼叫TableAdapter的Update方法,將應用程式的資料存回資料庫。

當您將資料表從[資料來源]視窗拖曳到表單上時,儲存資料所需的程式碼會自動加入。

加入至表單的任何其他資料表都需要手動新增此程式碼。

此逐步解說會示範如何加入程式碼,以儲存多個資料表的更新。

這個逐步解說中所述的工作包括: 在您的應用程式中使用資料來源設定向導建立和設定資料來源。

在[資料來源]視窗中設定專案的控制項。

如需詳細資訊,請參閱設定從資料來源視窗拖曳時要建立的控制項。

從[資料來源]視窗將項目拖曳至表單,以建立資料繫結控制項。

修改資料集中每個資料表內的一些記錄。

修改程式碼,以將資料集中更新的資料傳送回資料庫。

必要條件 本逐步解說使用SQLServerExpressLocalDB和Northwind範例資料庫。

如果您沒有SQLServerExpressLocalDB,請從SQLServerExpress下載頁面或透過VisualStudio安裝程式進行安裝。

在VisualStudio安裝程式中,您可以將SQLServerExpressLocalDB安裝為資料儲存和處理工作負載的一部分,或安裝為個別的元件。

遵循下列步驟來安裝Northwind範例資料庫: 在VisualStudio中,開啟[SQLServer]物件總管視窗。

(SQLServer物件總管會安裝為VisualStudio安裝程式中的資料儲存和處理工作負載的一部分。

)展開SQLServer節點。

以滑鼠右鍵按一下您的LocalDB實例,然後選取[追加查詢]。

[查詢編輯器]視窗隨即開啟。

將Northwindtransact-sqlSQL腳本複製到剪貼簿。

此TSQL腳本會從頭開始建立Northwind資料庫,並在其中填入資料。

將[TSQL腳本]貼入[查詢編輯器],然後選擇[執行]按鈕。

經過一小段時間之後,查詢就會完成執行,並建立Northwind資料庫。

建立WindowsForms應用程式 為c#或VisualBasic建立新的WindowsForms應用程式專案。

將專案命名為UpdateMultipleTablesWalkthrough。

建立資料來源 此步驟會使用[資料來源組態精靈]從Northwind資料庫建立資料來源。

您必須具有Northwind範例資料庫的存取權,才能建立連接。

如需設定Northwind範例資料庫的詳細資訊,請參閱如何:安裝範例資料庫。

在[資料]功能表上,選取[顯示資料來源]。

[資料來源]視窗隨即開啟。

在[資料來源]視窗中,選取[新增新資料來源],以啟動[資料來源組態精靈]。

在[選擇資料來源類型]畫面上,選取[資料庫],然後選取[下一步]。

在[選擇您的資料連線]畫面上,執行下列其中一項: 如果下拉式清單中有提供Northwind範例資料庫的資料連接,請選取這個資料連接。

-或- 選取[新增連線],以開啟[新增/修改連線]對話方塊。

如果您的資料庫需要密碼,請選取包含機密資料的選項,然後選取[下一步]。

在[將連接字串儲存到應用程式佈建檔]中,選取[下一步]。

在[選擇您的資料庫物件]畫面上,展開[資料表]節點。

選取[Customers]和[Orders]資料表,然後選取[完成]。

NorthwindDataSet會新增專案中,且資料表會出現在[資料來源]視窗中。

設定要建立的控制項 在這個逐步解說中,資料表中的資料Customers是在個別控制項中顯示資料的詳細資料版面配置中。

資料表中的資料Orders會在控制項中顯示的方格配置中DataGridView。

在資料來源視窗中設定項目的卸除類型 在[資料來源]視窗中,展開[Customers]節點。

在[customers]節點上,從控制項清單中選取[詳細資料],以將Customers資料表的控制項變更為個別控制項。

如需詳細資訊,請參閱設定從資料來源視窗拖曳時要建立的控制項。

建立資料系結表單 您可以從[資料來源]視窗將專案拖曳至表單,以建立資料繫結控制項。

從[資料來源]視窗,將[客戶]主節點拖曳至Form1。

會在表單上顯示具有描述性的資料繫結控制項,以及巡覽記錄的工具區域(BindingNavigator)。

NorthwindDataSet、、CustomersTableAdapterBindingSource和BindingNavigator都會出現在元件匣中。

從[資料來源]視窗將關聯的[Orders]節點拖曳至[Form1]。

注意 關聯的[Orders]節點位於[Fax]節點之下,而且是[Customers]節點的子節點。

DataGridView控制項以及巡覽記錄的工具區域(BindingNavigator)會出現在表單上。

OrdersTableAdapter並BindingSource顯示在元件匣中。

加入程式碼以更新資料庫 您可以藉由呼叫[Customers]和[Orders]TableAdapters的Update方法以更新資料庫。

預設會將的[儲存]按鈕的事件處理常式BindingNavigator加入至表單的程式碼,以將更新傳送至資料庫。

此程式會修改程式碼,以正確的順序傳送更新。

這樣可以消除引發參考完整性錯誤的可能性。

程式碼也會藉由將try-catch區塊中的更新呼叫換行,以實作錯誤處理。

您可以修改程式碼,使其符合應用程式的需求。

注意 為了清楚起見,本逐步解說不會使用交易。

但是,如果您要更新兩個以上的相關資料表,請在交易內包含所有更新邏輯。

交易是一種處理常式,可確保資料庫的所有相關變更在認可任何變更之前都已成功。

如需詳細資訊,請參閱交易與並行存取。

將更新邏輯加入至應用程式 選取上的[儲存]按鈕BindingNavigator。

這會將程式碼編輯器開啟至bindingNavigatorSaveItem_Click事件處理常式。

替換事件處理常式中的程式碼,以呼叫相關TableAdapters的Update方法。

下列程式碼會先建立三個暫存資料表,以保留DataRowState(Deleted、Added及Modified)的更新資訊。

更新會以正確的循序執行。

程式碼看起來應該如下所示: Me.Validate() Me.OrdersBindingSource.EndEdit() Me.CustomersBindingSource.EndEdit() DimdeletedOrdersAsNorthwindDataSet.OrdersDataTable=CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted),NorthwindDataSet.OrdersDataTable) DimnewOrdersAsNorthwindDataSet.OrdersDataTable=CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added),NorthwindDataSet.OrdersDataTable) DimmodifiedOrdersAsNorthwindDataSet.OrdersDataTable=CType( NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified),NorthwindDataSet.OrdersDataTable) Try 'RemovealldeletedordersfromtheOrderstable. IfNotdeletedOrdersIsNothingThen OrdersTableAdapter.Update(deletedOrders) EndIf 'UpdatetheCustomerstable. CustomersTableAdapter.Update(NorthwindDataSet.Customers) 'AddneworderstotheOrderstable. IfNotnewOrdersIsNothingThen OrdersTableAdapter.Update(newOrders) EndIf 'UpdateallmodifiedOrders. IfNotmodifiedOrdersIsNothingThen OrdersTableAdapter.Update(modifiedOrders) EndIf NorthwindDataSet.AcceptChanges() CatchexAsException MsgBox("Updatefailed") Finally IfNotdeletedOrdersIsNothingThen deletedOrders.Dispose() EndIf IfNotnewOrdersIsNothingThen newOrders.Dispose() EndIf IfNotmodifiedOrdersIsNothingThen modifiedOrders.Dispose() EndIf EndTry this.Validate(); this.ordersBindingSource.EndEdit(); this.customersBindingSource.EndEdit(); NorthwindDataSet.OrdersDataTabledeletedOrders=(NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTablenewOrders=(NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTablemodifiedOrders=(NorthwindDataSet.OrdersDataTable) northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { //RemovealldeletedordersfromtheOrderstable. if(deletedOrders!=null) { ordersTableAdapter.Update(deletedOrders); } //UpdatetheCustomerstable. customersTableAdapter.Update(northwindDataSet.Customers); //AddneworderstotheOrderstable. if(newOrders!=null) { ordersTableAdapter.Update(newOrders); } //UpdateallmodifiedOrders. if(modifiedOrders!=null) { ordersTableAdapter.Update(modifiedOrders); } northwindDataSet.AcceptChanges(); } catch(System.Exceptionex) { MessageBox.Show("Updatefailed"); } finally { if(deletedOrders!=null) { deletedOrders.Dispose(); } if(newOrders!=null) { newOrders.Dispose(); } if(modifiedOrders!=null) { modifiedOrders.Dispose(); } } 測試應用程式 按F5。

在每個資料表中,變更一個或多個記錄的資料。

選取[儲存]按鈕。

檢查資料庫中的值,確認已儲存變更。

另請參閱 將資料儲存回資料庫 此頁面有所助益嗎? Yes No 還有其他意見反應嗎? 系統會將意見反應傳送給Microsoft:按下[提交]按鈕,您的意見反應將用來改善Microsoft產品和服務。

隱私權原則。

跳過 送出 謝謝。

此頁面有所助益嗎? Yes No 還有其他意見反應嗎? 系統會將意見反應傳送給Microsoft:按下[提交]按鈕,您的意見反應將用來改善Microsoft產品和服務。

隱私權原則。

跳過 送出 謝謝。

本文內容



請為這篇文章評分?