Download presentation
Presentation is loading. Please wait.
1
第十四章 資料庫應用程式 14.1 ADO.NET簡介 14.4 資料的單筆巡覽、新增、 修改、刪除
第十四章 資料庫應用程式 14.1 ADO.NET簡介 14.4 資料的單筆巡覽、新增、 修改、刪除 14.2 使用SQL Server Express 建立資料庫 14.5 BindingNavigator控制項 14.3 第一個資料庫應用程式 14.6 資料庫的關聯查詢 備註:可依進度點選小節
2
14.1 ADO .NET簡介 ADO .NET 是微軟 .NET 的資料庫存取架構。 採離線存取的方式。 ADO .NET 可分成: .NET Data Provider 是存取資料來源的一組類別程式庫 包含 Connection、DataAdapter、Command、 DataReader 物件 DataSet 是記憶體中的資料庫。 目前 ADO .NET 最新版本為 3.5 版。
3
擷取的資料表填入到記憶體中的DataSet資料集
4
將異動的資料表存(寫)回資料庫時
5
上面架構圖透過 Visual C# 2008 整合開發環境中 提供的資料工具: 控制項
控制項 控制項 透過這些控制項配合 [資料集設計工具] 快速建立ADO .NET資料庫應用程式,且自動產生Connection、DataAdapter、Command、DataSet 物件的相關程式碼。
6
BindingSource 控制項 提供連接資料庫,將取得資料庫中的記錄一次放入 記憶體中的 DataSet,以及將記憶體中的DataSet 資料一次寫回指定資料庫中。
DataGridView 控制項 可用來繫結顯示目前 DataSet 中的資料。 BindingNavigator 控制項 提供巡覽記憶體 DataSet 功能,如第一筆、上一筆 下一筆、最未筆的巡覽操作;也可以新增、刪除、 修改記憶體 DataSet 的資料。
7
14.2 使用SQL Express 建立資料庫 Visual C# 2008 Express 內建可讓使用者建立 Microsoft SQL Server 2008 Express Edition (簡稱SQL Server Express) 。 SQL Server Express 功能強大而可靠的資料庫管理工具, 可透過 Visual C# 2008 直接管理 SQL Server Express 物件。 如建立資料庫、資料表、檢視表、預存程序…等。 SQL Server Express 可用來存放視窗應用程式用戶端 及ASP .NET Web 應用程式和本機資料的存放區,且提供豐富 功能、資料保護及提高存取效能。 SQL Server Express很適合學生、SOHO 族和 個人工作室使用, 可免費隨應用程式重新散發。
8
14.2.1 如何建立SQL Server Express資料庫
練習設計一個名稱為 Database1.mdf 的資料庫。 Step1 新增名稱為「CreateDB」的 Windows Form 應用程式專案。 Step2 執行功能表的【專案(P)/加入新項目(W)】指令開啟「加入新項目」 視窗,請選取 服務架構資料庫 選項,並將 設為 Database1. mdf,將此 SQL Server Express 資料庫檔案儲存 於專案中。
12
認識資料表欄位的資料型別 在建立資料表前需知資料表欄位可允許使用資料型別
13
14.2.3 如何建立 SQL Server Express 資料庫的資料表
員工資料表有六個欄位,員工編號為主索引欄位:
14
Step1 延續上節CreateDB專案範例建立上面指定欄位。
上機 Step1 延續上節CreateDB專案範例建立上面指定欄位。 Step2 執行功能表的【檢視(V)/其他視窗(E)/資料庫總管(D)】 指令開啟「資料庫總管」視窗,請按 展開鈕,使專案連接到 Database1.mdf 資料庫:
15
Step3 新增 員工資料表,並新增員工編號、姓名、信箱、薪資、 雇用日期、是否已婚六個欄位,並將員工編號設為主索引欄位。
16
在新增欄位名稱為「員工編號」,欄位資料型別設為nvarchar(10)。
17
分別新增姓名、信箱、薪資、雇用日期、是否已婚五個欄位名稱以及對應的資料型別。
18
將員工編號欄位設為主索引鍵欄位。
19
按全部儲存鈕,將資料表名稱設為「員工」資料表。
20
Step4 再開啟「員工」資料表的設計畫面 主索引鍵圖示
21
14.2.4 如何將資料輸入到 SQL Server Express資料表內
練習輸入幾筆員工的記錄到員工資料表內。 Step1 延續上面「CreateDB」專案範例。 Step2 專案可連接到 Database1.mdf 資料庫。 Step3 員工資料表按滑鼠右鍵由快顯功能表執行 「顯示資料表資料(S)」進入資料表記錄的輸入 畫面。
23
Step4 輸入三筆員工記錄資料,主索引鍵欄位資料不可以重複。 Step5 完成輸入資料後,按 全部儲存鈕將所輸入的 員工記錄儲存。
24
14.3 第一個資料庫應用程式 練習使用 Visual C# 2008 整合開發環境中所提供的 資料工具 、 、 控制項: - 透過這些控制項配合 [資料集設計工具] 連接 Database1.mdf 資料庫的員工資料表。 - 快速建立 ADO .NET 資料庫應用程式。 - 自動產生Connection、DataAdapter、Command、 DataSet 物件的相關程式碼。
25
使用資料工具 和 及 建立下圖簡易的員工資料庫應用程式。 透過 BindingSource 擷取 Database1
使用資料工具 和 及 建立下圖簡易的員工資料庫應用程式。 透過 BindingSource 擷取 Database1.mdf 員工資料表的記錄 並放入「員工DataGridView」內。 當使用者新增、修改、刪除「員工DataGridView」內的員工 資料後,可按 鈕將「員工DataGridView」內的員工 資料一次寫回 Database1.mdf的員工資料表。
26
執行情形
27
資料表欄位
28
Step 1 延續上面「CreateDB」專案,或新增名稱為「EmployeeDB」的 Windows Form 應用程式專案。
上機 Step 1 延續上面「CreateDB」專案,或新增名稱為「EmployeeDB」的 Windows Form 應用程式專案。 Step2 新增 BindingSource 控制項 Step3 連接資料來源
30
bindingSource1 連接書附光碟 chap14 資料夾下的Database1
bindingSource1 連接書附光碟 chap14 資料夾下的Database1.mdf;再將該資料庫中的「員工」資料表 放入 database1DataSet 資料集物件中。
38
Step4 建立 DataGridView 顯示員工資料
39
01 private void Form1_Load(object sender, EventArgs e) 02 { 03 // TODO: 這行程式碼會將資料載入 'database1DataSet.員工' 資料表。 04 //您可以視需要進行移動或移除。 05 this.員工TableAdapter.Fill(this.database1DataSet.員工); 06 } Step5 執行程式
40
Step6 加入 按鈕並撰寫程式碼 01 private void Form1_Load(object sender, EventArgs e) 02 { 03 // TODO: 這行程式碼會將資料載入 'database1DataSet.員工' 資料表。 04 //您可以視需要進行移動或移除。 06 this.員工TableAdapter.Fill(this.database1DataSet.員工); 07 } private void btnUpdate_Click(object sender, EventArgs e) 10 { 11 this.員工TableAdapter.Update(this.database1DataSet.員工); 12 }
41
Step7 執行程式,按 鈕
42
14.4 資料的單筆巡覽、新增、刪除、修改 提供下面成員可讓您操作資料表的記錄, 例如資料記錄的新增、刪除、修改、取得資料總筆數 取得資料目前位置以及提供移動記錄的方法:
44
製作如下圖簡易的資料庫應用程式。您可以執行功能表 瀏覽項目來進行資料第一筆、上一筆、下一筆、最未筆 的切換;執行功能表編輯項目可以進行新增、刪除資料; 當員工資料編修完成可執行功能表的 [更新到資料庫] , 將記憶體的資料一次寫回 Database1.mdf 的員工資料表。
45
Step1 新增名稱為「EditDB1」的Windows Form 應用程式專案。 Step2 使用bindingSource1連接Database1.mdf;再將 員工資料表 加到 database1DataSet 。 Step3 顯示員工單筆資料
48
Step4 建立功能表選項
49
Step5 撰寫程式碼 FileName : EditDB1.sln 01 void RecordData() 02 {
03 顯示記錄ToolStripMenuItem.Text = "第" + (員工BindingSource.Position + 1).ToString() + "第, 共" + 員工BindingSource.Count.ToString() + "筆"; 04 } 06 private void Form1_Load(object sender, EventArgs e) 07 { 08 // TODO: 這行程式碼會將資料載入 'database1DataSet.員工' 資料表。 09 //您可以視需要進行移動或移除。 10 this.員工TableAdapter.Fill(this.database1DataSet.員工); 11 RecordData(); 14 private void 第一筆ToolStripMenuItem_Click(object sender, EventArgs e) 15 { 16 員工BindingSource.MoveFirst(); 17 RecordData(); 18 }
50
20 private void 上一筆ToolStripMenuItem_Click(object sender, EventArgs e)
21 { 員工BindingSource.MovePrevious(); RecordData(); 24 } 26 private void 下一筆ToolStripMenuItem_Click(object sender, EventArgs e) 27 { 員工BindingSource.MoveNext(); RecordData(); 30 } 32 private void 最末筆ToolStripMenuItem_Click(object sender, EventArgs e) 33 { 員工BindingSource.MoveLast(); RecordData(); 36 } 38 private void 新增ToolStripMenuItem_Click(object sender, EventArgs e) 39 { try { 員工BindingSource.AddNew(); } catch (Exception ex) { MessageBox.Show(ex.Message); } 48 }
51
50 private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e)
51 { 52 員工BindingSource.RemoveAt(員工BindingSource.Position); 53 } 54 55 private void 更新到資料庫ToolStripMenuItem_Click(object sender, EventArgs e) 56 { 57 try 58 { 員工BindingSource.EndEdit(); 員工TableAdapter.Update(database1DataSet); MessageBox.Show("資料更新成功"); Form1_Load(sender, e); } 64 catch (Exception ex) 65 { MessageBox.Show(ex.Message); 67 } 68 }
52
69 70 private void 結束ToolStripMenuItem_Click(object sender, EventArgs e) 71 { 72 Application.Exit(); 73 }
53
14.5 BindingNavigator 控制項 提供巡覽記憶體 DataSet 的功能。 如第一筆、上一筆、下一筆、最未筆的巡覽操作。
因 BindingSource 物件可操作記憶體的 DataSet, 只要將 BindingNavigator 控制項的 BindingSource 屬性 指定要操作的 BindingSource 物件,可透過BindingNavigator 控制項直接操作 BindingSource 物件 對應的 DataSet。
54
試使用BindingNavigator控制項來巡覽、新增、俢改、 刪除「員工」資料表的資料。 按 鈕,可在記憶體 DataSet 新增一筆記錄 按 鈕,可在記憶體 DataSet 刪除一筆記錄 當編修 DataSet 資料後可按「更新」功能項目, 將記憶體 DataSet 資料一次寫回 Database.mdf 員工資料表中;透過 工具列 可巡覽 DataSet 的資料。
56
新增名稱為 EditDB2 的 Windows Form 應用程式專案。 Step2
上機 Step1 新增名稱為 EditDB2 的 Windows Form 應用程式專案。 Step2 使用 bindingSource1 連接 Database1.mdf ; 再將「員工」資料表加入到database1DataSet中。 Step3 顯示員工單筆資料
57
Step4 在表單建立 BindingNavigator 控制項
58
Step5 撰寫程式碼 FileName : EditDB2.sln
01 private void Form1_Load(object sender, EventArgs e) 02 { 03 // TODO: 這行程式碼會將資料載入 'database1DataSet.員工' 資料表。 04 //您可以視需要進行移動或移除。 05 this.員工TableAdapter.Fill(this.database1DataSet.員工); 06 } 07 08 private void toolStripButton1_Click(object sender, EventArgs e) 09 { 10 try 11 { 員工BindingSource.EndEdit(); 員工TableAdapter.Update(database1DataSet); MessageBox.Show("資料更新成功"); 15 } 16 catch(Exception ex) 17 { MessageBox.Show(ex.Message); 19 } 20 }
59
14.6 資料庫的關聯查詢 關聯式資料庫透過相同的欄位,將兩個有關係資料表 關聯在一起。 好處是可減少重複登錄記錄到資料表內。
常見 Access、SQL Server、MySQL…等資料庫 軟體都屬於關聯式資料庫,資料庫軟體內的資料表 皆可進行關聯。 在ADO .NET 提供 DataSet 物件好像是記憶體中資料庫。 DataSet中的 DataTable 物件就好像是記憶體中資料表。 可將記憶體 DataTable 物件進行關聯即可進行資料庫 關聯查詢。
60
使用資料工具 取得 Northwind.mdf 資料庫 的 訂貨主檔和 訂貨明細 資料表所有資料,然後將所有 資料填入記憶體 DataSet中的訂貨主檔 DataTable 及 訂貨明細 DataTable物件,接著再將兩個 DataTable 物件的「訂單號碼」欄位進行關聯。當您再下圖選取 表單中上方的 DataGridView 訂貨主檔中的某一筆訂單,下方的 DataGridView 會顯示該筆訂單號碼對應的訂貨 明細所有資料。
62
資料表欄位 Northwind.mdf 資料庫中的「訂貨主檔」及「訂貨明細」資料表。 訂貨主檔的主索引為「訂單號碼」; 訂貨明細的主索引是「訂單號碼」 及「產品編號」組合。 欄位格式
63
新增名稱為「RelationDB」的 Windows Form 應用程式專案。 Step2
上機 Step1 新增名稱為「RelationDB」的 Windows Form 應用程式專案。 Step2 新增 BindingSource 控制項連接 Northwind.mdf 資料來源
72
- 操作後表單下方出現 bindingSource1 及northwindDataSet 物件。
Step4 關聯兩個 DataTabl e物件,產生一個關聯物件名稱為「訂貨主檔_訂貨明細」。
74
將關聯物件名稱設為「訂貨主檔_訂貨明細」,讓父資料表「訂貨主檔」的「訂單號碼」欄位關聯到子資料表的「訂貨明細」的「訂單號碼」欄位。
75
NorthwindDataSet.xsd 檔案(資料集設計工具)內的訂貨主檔 及訂貨明細的資料結構描述會產生關聯物件圖示。
76
Step5 建立繫結資料來源 執行功能表的【資料(A)/顯示資料來源(S)】指令開啟「資料來源」視窗。 將資料來源視窗內的「訂貨主檔」DataTable 及訂貨 主檔下所關聯的「訂貨明細」DataTable 放入表單中。
78
FileName :RelationDB.sln 01 private void Form1_Load(object sender, EventArgs e) 02 { 03 // TODO: 這行程式碼會將資料載入 'northwindDataSet.訂貨明細' 資料表。 04 //您可以視需要進行移動或移除。 05 this.訂貨明細TableAdapter.Fill(this.northwindDataSet.訂貨明細); 06 // TODO: 這行程式碼會將資料載入 'northwindDataSet.訂貨主檔' 資料表。 07 //您可以視需要進行移動或移除。 08 this.訂貨主檔TableAdapter.Fill(this.northwindDataSet.訂貨主檔); 09 訂貨主檔DataGridView.Dock = DockStyle.Top; 10 訂貨明細DataGridView.Dock = DockStyle.Fill; 11 }
Similar presentations