課程名稱: 資料庫系統 授課老師:李春雄 博士

44
第第第 第第第 第第第第第第第第第第 第第第第第第第第第第 第第第第第第第第第第第第第 第第第第第 第第第第 第第第 第第 第第第第 第第第 第第

Upload: marja

Post on 07-Jan-2016

169 views

Category:

Documents


3 download

DESCRIPTION

第九章 資料庫與程式語言整合. 課程名稱: 資料庫系統 授課老師:李春雄 博士.  本章學習目標. 1. 讓讀者瞭解 「資料庫系統」與「應用程式」之 間的關係。 2. 讓讀者瞭解 ADO.NET 的架構及運作原理。 3. 讓讀者瞭解 ADO.NET 與資料庫的連接方式、 存取方法。.  本章內容. 9-1 何謂資料庫應用系統? 9-2 ADO.NET 的簡介 9-3 命名空間的引用 9-4 資料庫與 VB2010 整合. 9-1 何謂資料庫應用系統?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 課程名稱: 資料庫系統 授課老師:李春雄  博士

第九章第九章資料庫與程式語言整合資料庫與程式語言整合

課程名稱:課程名稱:資料庫系統資料庫系統授課老師:李春雄 博士授課老師:李春雄 博士

Page 2: 課程名稱: 資料庫系統 授課老師:李春雄  博士

本章學習目標本章學習目標

1.1. 讓讀者瞭解「資料庫系統」與「應用程式」讓讀者瞭解「資料庫系統」與「應用程式」

之之

間的關係。間的關係。

2.2. 讓讀者瞭解讓讀者瞭解 ADO.NETADO.NET 的架構及運作原理。的架構及運作原理。

3.3. 讓讀者瞭解讓讀者瞭解 ADO.NETADO.NET 與資料庫的連接方式、與資料庫的連接方式、

存取方法。存取方法。

Page 3: 課程名稱: 資料庫系統 授課老師:李春雄  博士

本章內容本章內容

9-19-1 何謂資料庫應用系統?何謂資料庫應用系統?

9-2 ADO.NET9-2 ADO.NET 的簡介的簡介

9-3 9-3 命名空間的引用命名空間的引用

9-4 9-4 資料庫與資料庫與 VB2010VB2010 整合整合

Page 4: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-1 9-1 何謂資料庫應用系統?何謂資料庫應用系統? 在前面幾個章節中,已經學會如何在前面幾個章節中,已經學會如何將使用者的需求將使用者的需求

繪製成繪製成 ERER 圖圖 (( 邏輯設計邏輯設計 )) ,進而,進而轉換轉換成真正可以儲存資成真正可以儲存資

料的料的資料表資料表 (( 實體設計實體設計 )) ,其目的就是建立一個,其目的就是建立一個降低資料降低資料

重覆重覆、、避免資料異常避免資料異常的資料庫操作環境,進而才能確保資的資料庫操作環境,進而才能確保資

料的料的一致性、完整性一致性、完整性,以達到,以達到資料共享資料共享 (Data Sharing)(Data Sharing)

的目的的目的。。

Page 5: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-1 9-1 何謂資料庫應用系統?何謂資料庫應用系統? <<續續 >> 既然,既然,資料庫以共享為目的資料庫以共享為目的,那就必須要透過,那就必須要透過應用應用

程式程式來讀取「來讀取「使用者的需求條件使用者的需求條件」,送到」,送到資料庫理管系統資料庫理管系統

來處理,並將來處理,並將查詢結果查詢結果回傳到回傳到個別使用者的畫面個別使用者的畫面,此系統,此系統

稱為稱為「資料庫應用系統」「資料庫應用系統」。。

(( 應用程式應用程式 ))在上圖中,「在上圖中,「應用程式應用程式」是指利用」是指利用 ASP, JSP,ASP, JSP,ADO.NETADO.NET 等網頁開發程式,等網頁開發程式,

透過透過 T-SQLT-SQL 指令指令來存取資料庫中的資料。它會依照使用者的需求來進行查詢,來存取資料庫中的資料。它會依照使用者的需求來進行查詢,

並將查詢結果回傳給使用者。並將查詢結果回傳給使用者。

圖圖 9-1 9-1 資料庫應用系統資料庫應用系統

Page 6: 課程名稱: 資料庫系統 授課老師:李春雄  博士

ADO.NET(ActiveX Data Object.NET)ADO.NET(ActiveX Data Object.NET) 可以說是可以說是微微

軟公司軟公司最新一代的最新一代的「資料庫存取架構」「資料庫存取架構」,它是專門用來,它是專門用來

存存 .NET.NET 平台上後端資料庫平台上後端資料庫,它不但比以前的,它不但比以前的 ADOADO 功能功能

還要強大。原因是還要強大。原因是 ADO.NETADO.NET 中包括了中包括了五個主要物件五個主要物件,,

分別為:分別為:

1.Connection1.Connection 物件物件

2.Command2.Command 物件物件

3.DataAdapter3.DataAdapter 物件物件

4.DataSet4.DataSet 物件物件

5.DataReader5.DataReader 物件物件這些物件是以物件導向的設計方式並且它對分散式資料存取提供了多項功能。這些物件是以物件導向的設計方式並且它對分散式資料存取提供了多項功能。

9-2 ADO.NET9-2 ADO.NET 的簡介的簡介

Page 7: 課程名稱: 資料庫系統 授課老師:李春雄  博士

此外,此外, ADO.NETADO.NET 為了因應不同的為了因應不同的網際網路的資料交換網際網路的資料交換。。

因此,也採用因此,也採用企業界標準的企業界標準的 XMLXML 格式格式,所以,在往後對於,所以,在往後對於

網路上的網路上的異質性資料庫異質性資料庫也有也有直接整合的功能及物件直接整合的功能及物件。。

9-2 ADO.NET9-2 ADO.NET 的簡介的簡介 <<續續 >>

Page 8: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-2.1 ADO.NET9-2.1 ADO.NET 的角色的角色

112/04/20 8

ADO.NETADO.NET 是是程式語言程式語言與與資料庫資料庫之間的之間的溝通橋樑溝通橋樑。因此,我們可以利。因此,我們可以利

用用 VB2010VB2010 、、 C#2010C#2010 、、 ASP.NET 3.5ASP.NET 3.5 及及 J#J# 等等程式語言程式語言來撰來撰

寫應用程式,再透過寫應用程式,再透過 ADO.NETADO.NET 就可以輕易的存取就可以輕易的存取資料庫資料庫的資料了。的資料了。

如圖如圖 9-29-2 所示:所示:

圖圖 9-2 ADO .NET9-2 ADO .NET 的角色的角色

Page 9: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-2.2 ADO.NET9-2.2 ADO.NET 的架構圖的架構圖

112/04/20 9

在圖在圖 9-3 ADO .NET 9-3 ADO .NET 架構圖中,我們可以很清楚的了解架構圖中,我們可以很清楚的了解

ADO.NETADO.NET

的資料存取方式主要有的資料存取方式主要有兩種方式兩種方式::

第一種第一種是利用是利用 DataSetDataSet 來存取資料庫中的資料。來存取資料庫中的資料。

第二種第二種則是直接經由則是直接經由 DataReaderDataReader 來存取資料庫中的資料。來存取資料庫中的資料。

Page 10: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 10

說明:說明:

1. Connection1. Connection :用來建立:用來建立與資料庫之間的連接與資料庫之間的連接。 。

2. Command2. Command :用來對資料庫:用來對資料庫執行執行 SQLSQL 命令命令,, SQLSQL 命令包括命令包括

Insert, Update,Delete, SelectInsert, Update,Delete, Select 等。等。

3. DataReader3. DataReader :以:以唯讀方式唯讀方式從資料來源從資料來源讀取順向資料流讀取順向資料流,提供程,提供程

式存取資料的介面。式存取資料的介面。

Page 11: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 11

4. DataAdapter4. DataAdapter :表示:表示 SQLSQL 命令集命令集和和資料庫資料庫連接連接,使用,使用資料來資料來

源源填入 填入

DataSetDataSet 並並更新資料更新資料。。 DataAdapterDataAdapter 物件所提供的四個物件所提供的四個

CommandCommand 物件物件 (( 包括:包括: SelectCommand, SelectCommand,

InsertCommand, UpdateComman InsertCommand, UpdateComman 及及

DeleteCommandDeleteCommand)) 來進行資料的存取。來進行資料的存取。

Page 12: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 12

5. DataSet5. DataSet :可以:可以讀資料庫的內容讀資料庫的內容載入載入記憶體記憶體中,在記憶體中中,在記憶體中建立建立

一個或多個資料表一個或多個資料表,提供程式存取資料,其,提供程式存取資料,其缺點缺點就是會就是會佔用較多的佔用較多的

記憶體空間記憶體空間,因此,導致系統負荷較大。而,因此,導致系統負荷較大。而優點優點則是資料處理上比則是資料處理上比

較較有彈性有彈性。。

Page 13: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20

首先首先 ADO.NETADO.NET 透過透過 ConnectionConnection 物件物件與與資料庫資料庫進行連接,接下來進行連接,接下來

說明兩種方式的不同之處:說明兩種方式的不同之處:

一、第一種方式:一、第一種方式:

利用利用 DataReaderDataReader 來存取資料庫中的資料,其運作流程如下所示:來存取資料庫中的資料,其運作流程如下所示:

說明:說明:

利用利用 CommandCommand 物件物件來來存取資料庫存取資料庫,並且透過,並且透過 DataReaderDataReader 物件物件來來

讀取資料讀取資料,最後再,最後再利用利用 TextBox, Msgbox …TextBox, Msgbox … 物件顯示資料物件顯示資料內容,內容,

而此種方法與讀者以前學過的而此種方法與讀者以前學過的 RecordSetRecordSet 觀念相同,觀念相同,比較簡易比較簡易,,容易容易

學習學習並且讀取,但是資料是並且讀取,但是資料是唯讀的查詢方式唯讀的查詢方式,,無法直接的修改無法直接的修改,並且,並且程程

式碼比較多式碼比較多。。

Connection Command DataReader 資料控制項

資料庫

Page 14: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20

二、第二種方式:二、第二種方式:

利用利用 DataSetDataSet 來存取資料庫中的資料,其運作流程如下所示:來存取資料庫中的資料,其運作流程如下所示:

Connection DataAdapter DataSet 資料控制項

資料庫

說明:說明:

我們可以利用我們可以利用 DataAdapterDataAdapter 物件物件的的 FillFill 方法方法來將資料庫中的資料來將資料庫中的資料

暫時放到暫時放到 DataSetDataSet 物件物件中。中。

程式如下所示:程式如下所示: DataAdapter.Fill(DataSet, "DataAdapter.Fill(DataSet, " 學生資料表學生資料表 ")")

Page 15: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 15

除此之外,利用此種方法,可以除此之外,利用此種方法,可以透過透過 DataAdapterDataAdapter 物件物件來下達來下達

各項各項 SQLSQL 語法語法,並且將資料,並且將資料查詢的結果查詢的結果存放到存放到離線的離線的 DataSetDataSet

物件物件中,因此,中,因此, DataAdapterDataAdapter 物件物件在此扮演的角色便是在此扮演的角色便是資料庫資料庫

與與 DataSetDataSet 物件物件之間重要的溝通媒介,並且之間重要的溝通媒介,並且 DataSetDataSet 還可以進還可以進

行行離線資料修改離線資料修改,因此,可以,因此,可以降低資料庫管理系統的連線負擔降低資料庫管理系統的連線負擔。。

Page 16: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-3 9-3 命名空間的引用命名空間的引用

112/04/20 16

.NET Framework.NET Framework 是個物件導向的系統,因此,當開發人員要使是個物件導向的系統,因此,當開發人員要使

用用 VB2010VB2010 來呼叫來呼叫系統底層的類別系統底層的類別時,必須先將時,必須先將類別的命名空間類別的命名空間

(( namespacenamespace ))引用引用(匯入)進來。若要使用到(匯入)進來。若要使用到 ADO.NETADO.NET ,則,則

必須將必須將 System.DataSystem.Data 命名空間命名空間引用進來,此一命名空間定義了建引用進來,此一命名空間定義了建

構構 ADO.NETADO.NET 架構的基礎類別。架構的基礎類別。

Page 17: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-3.1 9-3.1 如何引用如何引用 ADO.NETADO.NET 命名空命名空間間

112/04/20 17

如果我們要利用如果我們要利用 VB2010VB2010 來存取資料庫時,必須要用到來存取資料庫時,必須要用到 ADO.NETADO.NET

物件,而如何使用物件,而如何使用 ADO.NETADO.NET 內的物件呢?非常簡單,您只要在撰內的物件呢?非常簡單,您只要在撰

寫寫程式前面程式前面先先引用引用 (Imports)(Imports)ADO.NETADO.NET 的的命名空間命名空間

(Namespace) (Namespace) 。。

◆◆ 引用引用 (Imports)ADO.NET(Imports)ADO.NET 的命名空間的命名空間 (Namespace)(Namespace) 的方法:的方法:

Imports Imports 命名空間的物件名稱命名空間的物件名稱

Page 18: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 18

而 在而 在 ADO.NETADO.NET 中 的 命 名 空 間 的 物 件 名 稱 有非常 多 ,諸如 :中 的 命 名 空 間 的 物 件 名 稱 有非常 多 ,諸如 :

System.Data, System.Data.OleDb, System.Data, System.Data.OleDb,

System.Data.SqlClient, System.Data.IO, System.Data.SqlClient, System.Data.IO,

System.Data.XMLSystem.Data.XML 等等,而我們在撰寫程式時,怎麼知道要引等等,而我們在撰寫程式時,怎麼知道要引

用那一個命名空間的物件呢?因此,我們就必須要了解在什麼時候用那一個命名空間的物件呢?因此,我們就必須要了解在什麼時候

引用那一個命名空間才可以存取到資料庫中的資料。引用那一個命名空間才可以存取到資料庫中的資料。

Page 19: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 19

現在我們歸納一般常用的引用的撰寫方法如下:現在我們歸納一般常用的引用的撰寫方法如下:

一、引用一、引用 System.Data.OleDbSystem.Data.OleDb 命名空間命名空間

(( 適用適用 AccessAccess 、、 ExcelExcel 、、 FoxProFoxPro 資料庫資料庫 ))

Imports Imports System.DataSystem.Data

Imports Imports System.Data.OleDbSystem.Data.OleDb

說明:表示要引用說明:表示要引用 ADO.NETADO.NET 基礎物件以及基礎物件以及引用引用 OLE DBOLE DB 資料來源資料來源的的

物件物件。

Page 20: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 20

二、若您要連結的資料庫來源是二、若您要連結的資料庫來源是 SQL Server 7.0SQL Server 7.0 以上版本,則您必以上版本,則您必

須將 須將

System.Data.OledbSystem.Data.Oledb 改成改成 System.Data.SqlClientSystem.Data.SqlClient 這個命這個命

名空間名空間

Imports Imports System.DataSystem.Data

Imports Imports System.Data.SqlClientSystem.Data.SqlClient

說明:表示要引用說明:表示要引用 ADO.NETADO.NET 基礎物件以及基礎物件以及引用引用 SQL ServerSQL Server 資料資料

來源來源的的

物件。物件。

Page 21: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 21

想要利用想要利用 ADO.NETADO.NET 來存取資料庫來存取資料庫,就必須要,就必須要先建立物件先建立物件與與資料庫資料庫

連結,其最主要的工作是連結,其最主要的工作是透過透過 ConnectionConnection 物件物件了。了。

而而 ADO.NETADO.NET 所提供的所提供的 ConnectionConnection 物件,可以分為物件,可以分為兩種連結方兩種連結方

式式::

第一種第一種:是指:是指 OleDbConnectionOleDbConnection 物件物件,它是專門用來連結資料,它是專門用來連結資料

庫為 庫為

AccessAccess 、、 ExcelExcel 、、 DbaseDbase 時最適合時最適合,但是在使用前必,但是在使用前必

須要先 須要先

引用引用 System.Data.OleDbSystem.Data.OleDb 的命名空間的命名空間。。

9-3.2 9-3.2 使用使用 ConnectionConnection 物件與物件與 資料庫連結資料庫連結

Page 22: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 22

第二種第二種:是指:是指 SqlConnectionSqlConnection 物件,它是物件,它是微軟專門針對微軟專門針對 SQL SQL

Server7.0 Server7.0 資料庫以上版本資料庫以上版本量身定作了它自己的物量身定作了它自己的物

件,所件,所

以當使用者想要利用程式與連結以當使用者想要利用程式與連結 SQL Server SQL Server 時,時,

就必須就必須

要先要先引用 引用 System.Data.SqlClientSystem.Data.SqlClient 的命名空間的命名空間。。

Page 23: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 23

在本單元中,將介紹如何在本單元中,將介紹如何利用利用 VBVB 程式語言程式語言來連接來連接後端的資料後端的資料

庫庫系統,並且將後端的資料庫透過系統,並且將後端的資料庫透過 DataReaderDataReader 物件物件或或

DataSetDataSet 物件物件來讀取資料,最後再利用來讀取資料,最後再利用 TextBox, Msgbox TextBox, Msgbox ……

物件物件或或 DataGridViewDataGridView 等物件來顯示資料內容等物件來顯示資料內容。。

9-4 9-4 資料庫與資料庫與 VBVB 整合整合

Page 24: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-4.1 Access20109-4.1 Access2010 資料庫與資料庫與 VB2010VB2010連結連結

112/04/20 24

一、一、 VB2010VB2010 與與 AccessAccess 資料庫標準連結方式,資料庫標準連結方式,

其步驟如下:其步驟如下:

1.1. 步驟一:引用命名空間步驟一:引用命名空間

Imports System.DataImports System.Data.OleDb

Page 25: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 25

2.2. 步驟二:設定資料庫名稱與路徑步驟二:設定資料庫名稱與路徑 << Access2010 /

Access2007>

< Access2003>

3.3. 步驟三:宣告及建立步驟三:宣告及建立 ConnectionConnection 物件物件

4.4. 步驟四:使用步驟四:使用 OpenOpen 方法來開啟資料庫方法來開啟資料庫

5.5. 步驟五:使用步驟五:使用 CloseClose 方法來關閉資料庫方法來關閉資料庫

Dim conn As OleDbConnection ' 宣告連線的物件conn = New OleDbConnection(Source) ' 連線

conn.Open() ' 開啟資料庫

conn.Close() ' 關閉資料庫

Dim dbpath As String = "DBMS.mdb" ' 宣告資料庫所在的路徑變數Dim Source As String ' 宣告連線的字串Source = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath

Dim dbpath As String = "DBMS.accdb" ' 宣告資料庫所在的路徑變數Dim Source As String ' 宣告連線的字串Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath

Page 26: 課程名稱: 資料庫系統 授課老師:李春雄  博士

二、二、 VB2010VB2010 連結連結 AccessAccess 資料庫之測資料庫之測試程式試程式

112/04/20 26

程式檔案名稱 Ch9-4.1.sln

01

02

03

04

05

06

07

08

09

10

11

12

13

14

Imports System.Data

Imports System.Data.OleDb

Public Class Form1

Private Sub Button1_Click(……) Handles Button1.Click

Dim dbpath As String = "DBMS.accdb""DBMS.accdb" ' 宣告資料庫所在的路徑變數 Dim Source As String ' 宣告連線的字串 Source = "Provider=Microsoft.ACEACE.OLEDB.1212.0;Data Source=" & dbpath

Dim conn As OleDbConnection ' 宣告連線的物件 conn = New OleDbConnection(Source) ' 連線 conn.Open() ' 開啟資料庫 MsgBox("成功連結到 Access 資料庫 ")

conn.Close() ' 關閉資料庫 End Sub

End Class

Page 27: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-4.2 9-4.2 使用使用 DataReaderDataReader物件物件 讀取資料庫的資料讀取資料庫的資料

112/04/20 27

當我們當我們利用利用 OleDbConnectionOleDbConnection 來連接資料庫之後,接下來我們就來連接資料庫之後,接下來我們就

可以再利用可以再利用 ADO.NETADO.NET 物件中的物件中的 DataReaderDataReader 物物件來取得件來取得資料庫資料庫

中的資料中的資料,並,並將查詢的資料顯示於表單將查詢的資料顯示於表單上,而上,而 DataReaderDataReader 物件物件只只

能逐筆由開頭循序的讀取能逐筆由開頭循序的讀取資料庫中的資料,而且資料庫中的資料,而且讀出的資料是「唯讀出的資料是「唯

讀」狀態讀」狀態,因此,,因此,不能再進行其他的操作不能再進行其他的操作。其程式流程如下: 。其程式流程如下:

Connection Command DataReader 資料控制項

資料庫

Page 28: 課程名稱: 資料庫系統 授課老師:李春雄  博士

一、一、 CommandCommand 物件物件

112/04/20 28

  建立資料庫的連結並且開啟資料庫之後,我們必須利用建立資料庫的連結並且開啟資料庫之後,我們必須利用

Command Command 物件物件來撰寫來撰寫 SQLSQL 指令才能操作資料庫的四個動作指令才能操作資料庫的四個動作,包括,包括

了了 Insert(Insert( 新增新增 )) 、、 Delect(Delect( 刪除刪除 )) 、、 Update(Update( 修改修改 )) 及及 SelectSelect

(( 查詢查詢 )) 。。

在在 ADO.NETADO.NET 所提供的所提供的 CommandCommand 物件,有物件,有兩種執行兩種執行 SQLSQL 語法語法

的方法的方法::

第一種第一種:透過:透過 CommandCommand 物件的物件的 ExecuteNonQueryExecuteNonQuery 方法方法,可以,可以

「新「新

增」、「修改」「刪除」增」、「修改」「刪除」資料庫中的資料。資料庫中的資料。

第二種第二種:是透過:是透過 CommandCommand 物件的物件的 ExecuteReaderExecuteReader 方法方法將將「查「查

詢詢」結」結

果的 果的 DataReaderDataReader 物件傳回。物件傳回。

Page 29: 課程名稱: 資料庫系統 授課老師:李春雄  博士

二、二、 DataReaderDataReader 物件物件

112/04/20 29

我們利用我們利用 OleDbCommandOleDbCommand 執行執行 SQLSQL 指令之後,尚無法顯示執行指令之後,尚無法顯示執行

的結果,因此,我們就必須將其設定給的結果,因此,我們就必須將其設定給 DataReaderDataReader 物件物件,並且再,並且再

利用利用 CommandCommand 物件的物件的 ExecuteReaderExecuteReader 方法方法來執行,因此,爾來執行,因此,爾

後要讀取資料時,必須以後要讀取資料時,必須以 OledbDataReaderOledbDataReader 的的 ReadRead 方法方法來取來取

得資料。 得資料。

Page 30: 課程名稱: 資料庫系統 授課老師:李春雄  博士

(( 一一 )VB2010)VB2010 與與 AccessAccess 資料庫的撰資料庫的撰寫方法寫方法

112/04/20 30

使用使用 OleDbCommandOleDbCommand 、、 OleDbDataReaderOleDbDataReader 物件物件 (( 適用適用

AccessAccess 資料庫資料庫 )) 其步驟如下:其步驟如下:

Page 31: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 31

Page 32: 課程名稱: 資料庫系統 授課老師:李春雄  博士

(( 二二 )DataReader)DataReader 的方法與屬性一覽的方法與屬性一覽表表

112/04/20 32

Page 33: 課程名稱: 資料庫系統 授課老師:李春雄  博士

1.Read()1.Read() 方法方法

112/04/20 33

利用利用 DataReaderDataReader 物件來物件來「讀取資料庫中第一筆記錄」「讀取資料庫中第一筆記錄」如果讀到記如果讀到記

錄時,則傳回錄時,則傳回 TrueTrue ,否則傳回,否則傳回 FalseFalse 。當資料記錄有。當資料記錄有兩筆或兩筆兩筆或兩筆

以上以上時,那我們如何讀取全部的記錄呢?非常簡單我們只要在程式片時,那我們如何讀取全部的記錄呢?非常簡單我們只要在程式片

段中利用段中利用 While--- End While While--- End While 與與 For…NextFor…Next 迴圈迴圈即可顯示所有即可顯示所有

的資料。 的資料。

Page 34: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 34

如果所要讀取的欄位資料是循序的,則利用如果所要讀取的欄位資料是循序的,則利用 for/nextfor/next 迴圈的方法是迴圈的方法是

最佳方式,但是,如果要顯示的欄位資料最佳方式,但是,如果要顯示的欄位資料並非是循序並非是循序的,則必須要利的,則必須要利

用用直接指定法來直接在直接指定法來直接在 ItemItem 屬性中輸入欄位名稱屬性中輸入欄位名稱。。

Page 35: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 35

Dim dbpath As String = "DBMS.accdb" ' 宣告資料庫所在的路徑變數 Dim Source As String ' 宣告連線的字串 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath

Dim conn As OleDbConnection ' 宣告連線的物件 conn = New OleDbConnection(Source) ' 連線 conn.Open() ' 開啟資料庫 Dim SelectCmd As String

Dim i As Integer

SelectCmd = "select * from 學生資料表 "

Dim Cmd As OleDbCommand = New OleDbCommand(SelectCmd, conn)

Dim reader As OleDbDataReader

reader = Cmd.ExecuteReader()

'' 顯示資料表欄位的所有資料顯示資料表欄位的所有資料 While reader.Read()While reader.Read()

For i = 0 To reader.FieldCount - 1For i = 0 To reader.FieldCount - 1

TextBox1.Text &= reader.Item(i) & vbTabTextBox1.Text &= reader.Item(i) & vbTab

Next iNext i

TextBox1.Text &= vbNewLineTextBox1.Text &= vbNewLine

End WhileEnd While

conn.Close() ' 關閉資料庫

完整的程式碼:完整的程式碼: ch9-4.2A.slnch9-4.2A.sln

Page 36: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 36

顯示結果:顯示結果: 完整的程式碼:完整的程式碼: ch9-4.2A.slnch9-4.2A.sln

Page 37: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20

如果利用直接指定法來直接在如果利用直接指定法來直接在 ItemItem 屬性中輸入欄位名稱。則以上行屬性中輸入欄位名稱。則以上行

號號 18~2318~23 則必須改為以下程式即可。則必須改為以下程式即可。

While reader.Read()While reader.Read()

TextBox1.Text &= reader.Item("TextBox1.Text &= reader.Item(" 學號學號 ") & ") &

vbTabvbTab

TextBox1.Text &= reader.Item("TextBox1.Text &= reader.Item(" 姓名姓名 ") & ") &

vbTabvbTab

TextBox1.Text &= reader.Item("TextBox1.Text &= reader.Item(" 系碼系碼 ") & ") &

vbTabvbTab

TextBox1.Text &= vbNewLineTextBox1.Text &= vbNewLine

End While End While

Page 38: 課程名稱: 資料庫系統 授課老師:李春雄  博士

2.GetName(i)2.GetName(i) 方法方法

112/04/20 38

完成上面的程式碼之後,您是否會發現只會顯示出所有的記錄,但是完成上面的程式碼之後,您是否會發現只會顯示出所有的記錄,但是

卻無法即時的了解到每一筆記錄中每一個欄位所代表的意義呢?因此,卻無法即時的了解到每一筆記錄中每一個欄位所代表的意義呢?因此,

我們就必須要把每一筆記錄的我們就必須要把每一筆記錄的每一個欄位名稱顯示出來每一個欄位名稱顯示出來,當作,當作抬頭名抬頭名

稱稱。。

Page 39: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 39

.....................

……

Dim SelectCmd As String

Dim i As Integer

SelectCmd = "select * from 學生資料表 "

Dim Cmd As OleDbCommand = New OleDbCommand(SelectCmd, conn)

Dim reader As OleDbDataReader

reader = Cmd.ExecuteReader()

' 顯示資料表欄位名稱 For i = 0 To reader.FieldCount - 1

TextBox1.Text &= reader.GetName(i) & vbTab

Next i

TextBox1.Text &= vbNewLine

' 顯示資料表欄位的所有資料 While reader.Read()

For i = 0 To reader.FieldCount - 1

TextBox1.Text &= reader.Item(i) & vbTab

Next i

TextBox1.Text &= vbNewLine

End While

conn.Close() ' 關閉資料庫

Page 40: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 40

顯示結果:顯示結果: 完整的程式碼:完整的程式碼: ch9-4.2B.slnch9-4.2B.sln

Page 41: 課程名稱: 資料庫系統 授課老師:李春雄  博士

9-4.3 9-4.3 使用使用 DataSetDataSet 物件來讀取資物件來讀取資料料

112/04/20 41

DataSetDataSet 物件物件是是 System.DataSystem.Data 命名空間的重要物件,其主要的命名空間的重要物件,其主要的

功能是功能是取得資料庫中的資料之後取得資料庫中的資料之後,再,再顯示在瀏覽器顯示在瀏覽器上。但是上。但是

DataSetDataSet 物件物件本身本身並沒有存取資料庫的能力並沒有存取資料庫的能力,因此它需要,因此它需要依賴其它依賴其它

的物件的物件 (( 例如例如 OleDbConnectionOleDbConnection 物件、物件、 OleDbCommandOleDbCommand 物物

件或是件或是 OldDbDataAdapterOldDbDataAdapter 物件物件 )) 提供資料給它。其中以提供資料給它。其中以

「「 OldDbDataAdapterOldDbDataAdapter 」物件跟」物件跟 DataSetDataSet 之間的關係最為密切。之間的關係最為密切。

其程式流程如下: 其程式流程如下:

Connection DataAdapter DataSet 資料控制項

資料庫

Page 42: 課程名稱: 資料庫系統 授課老師:李春雄  博士

連結連結 DataAdapterDataAdapter 物件的步驟物件的步驟

112/04/20 42

步驟一步驟一:宣告並建立:宣告並建立 DataSetDataSet 與與 DataAdapterDataAdapter 兩個物件兩個物件

步驟二步驟二:再利用:再利用 DataAdapterDataAdapter 物件直接執行的物件直接執行的 SQLSQL 語法語法

步驟三步驟三:最後使用:最後使用 DataAdapterDataAdapter 物件的物件的 FillFill 方法將查詢資料的結果方法將查詢資料的結果

放到放到

DataSetDataSet 物件中。物件中。

Page 43: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 43

Dim dbpath As String = "DBMS.accdb" ' 宣告資料庫所在的路徑變數 Dim Source As String ' 宣告連線的字串 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath

Dim conn As OleDbConnection ' 宣告連線的物件 conn = New OleDbConnection(Source) ' 連線 conn.Open() ' 開啟資料庫 ' 開啟資料庫 Dim SelectCmd As String

SelectCmd = “select 學號 , 姓名 , 系名 from 學生資料表 , 科系代碼資料表 where 學生資料表 . 系碼 = 科系代碼資料表 . 系碼 "

'' 宣告物件宣告物件 Dim DtApter As OleDbDataAdapterDim DtApter As OleDbDataAdapter

Dim DtSet As DataSetDim DtSet As DataSet

DtApter = New OleDbDataAdapter(SelectCmd, conn)DtApter = New OleDbDataAdapter(SelectCmd, conn)

DtSet = New DataSetDtSet = New DataSet

'' 讀取資料表讀取資料表 DtApter.Fill(DtSet, "DtApter.Fill(DtSet, " 學生資料表學生資料表 ")")

DataGridView1.DataSource = DtSet.Tables(" 學生資料表 ")

conn.Close() ' 關閉資料庫

完整的程式碼:完整的程式碼: ch9-4.3A.slnch9-4.3A.sln

Page 44: 課程名稱: 資料庫系統 授課老師:李春雄  博士

112/04/20 44

顯示結果 顯示結果 完整的程式碼:完整的程式碼: ch9-4.3A.slnch9-4.3A.sln