將資料儲存至資料庫(多個資料表) - Visual Studio (Windows)
文章推薦指數: 80 %
... 兩個關聯資料表的資料,並示範如何編輯記錄,以及將變更儲存回資料庫。
... 本逐步解說使用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產品和服務。
隱私權原則。
跳過
送出
謝謝。
本文內容
延伸文章資訊
- 1跨關聯性查詢- ADO.NET
您進行程式設計的物件會具有對其他物件的參考。 物件對物件的關聯性會對應到資料庫中的外部索引鍵樣式關聯性,只是純屬巧合。 屬性存取則提供 ...
- 2逐步解說:簡單的物件模型和查詢(C#) - ADO.NET
遵循這個逐步解說,建立在範例資料庫中建立資料表模型的實體類別。 然後建立簡單的查詢, ... 一般來說,您會使用物件關聯式設計工具來建立物件模型。
- 3將資料儲存至資料庫(多個資料表) - Visual Studio (Windows)
... 兩個關聯資料表的資料,並示範如何編輯記錄,以及將變更儲存回資料庫。 ... 本逐步解說使用SQL Server Express LocalDB 和Northwind 範例資料庫。
- 4建立資料集之間的關聯性- Visual Studio
如需有關資料集資料表中更新的詳細資訊,請參閱將資料儲存回資料庫。 僅限條件約束關聯. 當您建立DataRelation 物件時,您可以選擇指定關聯只用來強制執行 ...
- 5【C#】連接資料庫實作(MSSQL) | 阿猩的程式蛋糕店 - 點部落
這篇要介紹關聯性資料庫,筆者選用MSSQL作為後續工作使用,筆者試著用簡單的概念來說明,順便作個工作紀錄囉。內容範圍包含: SQL、T-SQL、DBMS、RDB.