59
14 14 ADO.NET ADO.NET 第第第第第 第第第第第 14-1 14-1 第第第第第第 第第第第第第 14-2 14-2 第第 第第 ADO.NET ADO.NET 第第第第第 第第第第第 14-3 14-3 DataGrid DataGrid 第第第第第第第第 第第第第第第第第 14-4 14-4 SQL SQL 第第第第第第 第第第第第第 14-5 14-5 SQL SQL 第第第第第第 第第第第第第

第14章 ADO.NET 存取資料庫

Embed Size (px)

DESCRIPTION

第14章 ADO.NET 存取資料庫. 14-1 資料庫的基礎 14-2 使用 ADO.NET 存取資料庫 14-3 DataGrid 控制項顯示資料庫 14-4 SQL 的資料庫查詢 14-5 SQL 的資料庫操作. 14-1 資料庫的基礎. 14-1-1 什麼是資料庫 14-1-2 使用 Access 建立資料庫. 14-1-1 什麼是資料庫. - PowerPoint PPT Presentation

Citation preview

Page 1: 第14章  ADO.NET 存取資料庫

11

第第 1414 章 章 ADO.NETADO.NET 存取資料庫存取資料庫 14-1 14-1 資料庫的基礎資料庫的基礎 14-2 14-2 使用使用 ADO.NETADO.NET 存取資料庫存取資料庫 14-3 14-3 DataGridDataGrid 控制項顯示資料庫控制項顯示資料庫 14-4 14-4 SQLSQL 的資料庫查詢的資料庫查詢 14-5 14-5 SQLSQL 的資料庫操作的資料庫操作

Page 2: 第14章  ADO.NET 存取資料庫

22

14-1 14-1 資料庫的基礎資料庫的基礎 14-1-1 14-1-1 什麼是資料庫什麼是資料庫 14-1-2 14-1-2 使用使用 AccessAccess 建立資料庫建立資料庫

Page 3: 第14章  ADO.NET 存取資料庫

33

14-1-1 14-1-1 什麼是資料庫什麼是資料庫 資 料 庫 正 確 的 說 只 是 「 資 料 庫 系 統 」資 料 庫 正 確 的 說 只 是 「 資 料 庫 系 統 」(( Database SystemDatabase System ))的一部分,資料庫系統的一部分,資料庫系統是由「資料庫」(是由「資料庫」( DatabaseDatabase ))和「資料庫管理和「資料庫管理系 統 」 (系 統 」 ( Database Mangement Database Mangement SystemSystem,, DBMSDBMS ))所組成,如下圖所示:所組成,如下圖所示:

Page 4: 第14章  ADO.NET 存取資料庫

44

14-1-2 14-1-2 使用使用 AccessAccess建立資料庫建立資料庫欄位名稱 資料型別 長度

BookID 文字 6

BookTitle 文字 30

BookPrice 貨幣

BookPubDate 日期/時間

Page 5: 第14章  ADO.NET 存取資料庫

55

14-2 14-2 ADO.NETADO.NET 的基礎的基礎 14-2-1 14-2-1 什麼是什麼是 ADO.NETADO.NET 14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀取資料庫物件讀取資料庫

Page 6: 第14章  ADO.NET 存取資料庫

66

14-2-1 14-2-1 什麼是什麼是 ADO.NETADO.NET-- 說明說明 ADO.NETADO.NET 是微軟新一代的技術,它是是微軟新一代的技術,它是「「 ADOADO」(」( ActiveX Data ObjectActiveX Data Object ))元件元件的後繼者。的後繼者。

ADO.NETADO.NET 的目的是提供一致的物件模型,存的目的是提供一致的物件模型,存取和編輯資料來源的資料,提供一致的資料處取和編輯資料來源的資料,提供一致的資料處理方式,資料來源並不限於資料庫,幾乎任何理方式,資料來源並不限於資料庫,幾乎任何資料來源資料來源 (( 如 如 EXCELEXCEL 、文字檔、、文字檔、 AccessAccess等等 )) 都可以,以都可以,以 VB.NETVB.NET 應用程式來說,使用應用程式來說,使用ADO.NETADO.NET 主要的目的是存取資料庫。主要的目的是存取資料庫。

Page 7: 第14章  ADO.NET 存取資料庫

77

ADO.NETADO.NET

DataReader

表單控制項(Data Binding)

Command

DataTable

DataSet

Connection

Data Source

DataAdapter

1

1

1

22

22

Page 8: 第14章  ADO.NET 存取資料庫

88

ADO.NET ADO.NET 第一種應用第一種應用 使用 使用 Connection Connection 物件建立資料來源的資料物件建立資料來源的資料

連結,然後使用 連結,然後使用 Command Command 物件執行指令物件執行指令取得資料來源的資料,取得資料來源的資料, (( 以資料庫來說此 以資料庫來說此 Command Command 即 即 SQL SQL 指令指令 )) ,在取得資料後,,在取得資料後,使用 使用 DataReader DataReader 物件讀取或填入 物件讀取或填入 DataSet DataSet 物件,最後使用 物件,最後使用 Data Binging Data Binging 在表單控制項 在表單控制項 (( 如 如 TextBox TextBox 或 或 DataGrid ) DataGrid ) 顯示資料表的紀錄。如需 顯示資料表的紀錄。如需 Insert / Delete / Insert / Delete / Update Update 資料庫也是蔡取類似方法。 資料庫也是蔡取類似方法。

Page 9: 第14章  ADO.NET 存取資料庫

99

14-2-1 14-2-1 什麼是什麼是 ADO.NETADO.NET--ConnectionConnection 物件物件

ConnectionConnection 物件可以建立與存取資料來源物件可以建立與存取資料來源的連結,以資料庫來說的連結,以資料庫來說 ConnectionConnection 物件物件還負責初始資料庫,還負責初始資料庫, ConnectionConnection 物件一物件一共分為兩種:共分為兩種:• OLE DBOLE DB ::使用使用 OleDbConnectionOleDbConnection 物件物件• SQL ServerSQL Server ::使用使用 SqlConnectionSqlConnection 物件物件

Page 10: 第14章  ADO.NET 存取資料庫

1010

14-2-1 14-2-1 什麼是什麼是 ADO.NETADO.NET--CommandCommand 物件物件

CommandCommand 物件可以對資料來源執行指令,物件可以對資料來源執行指令,以資料庫的資料來源而言,就是執行以資料庫的資料來源而言,就是執行 SQLSQL指令,在建立指令,在建立 ConnectionConnection 物件建立資料物件建立資料庫連結後,就可以使用庫連結後,就可以使用 CommandCommand 物件執物件執行行 SQLSQL 指令。指令。

CommandCommand 物件也分為兩種:物件也分為兩種:• OLE DBOLE DB ::使用使用 OleDbCommandOleDbCommand 物件物件• SQL ServerSQL Server ::使用使用 SqlCommandSqlCommand 物件物件

Page 11: 第14章  ADO.NET 存取資料庫

1111

14-2-1 14-2-1 什麼是什麼是 ADO.NETADO.NET--DataReaderDataReader 物件物件

ADO.NETADO.NET的的 DataReaderDataReader 物件可以從資物件可以從資料來源使用料來源使用 CommandCommand 物件執行物件執行 SQLSQL 指指令,取得如同令,取得如同循序檔案循序檔案一般唯讀且單向的一般唯讀且單向的資料流。因為資料流。因為 DataReaderDataReader 只在記憶體儲只在記憶體儲存一筆記錄,所以能夠提升應用程式的執存一筆記錄,所以能夠提升應用程式的執行效能,並且降低系統的負荷。行效能,並且降低系統的負荷。

DataReaderDataReader 物件分為兩種:物件分為兩種:• OLE DBOLE DB ::使用使用 OleDbDataReaderOleDbDataReader 物件物件• SQL ServerSQL Server ::使用使用 SqlDataReaderSqlDataReader 物件物件

Page 12: 第14章  ADO.NET 存取資料庫

1212

14-2-1 14-2-1 什麼是什麼是 ADO.NETADO.NET--DataSetDataSet和和 DataTableDataTable 物件物件

DataSetDataSet 物件是由物件是由 DataTableDataTable 物件所組物件所組成,成, DataSetDataSet 物件可以代表一個儲存在記憶體的物件可以代表一個儲存在記憶體的資料庫,每一個資料庫,每一個 DataTableDataTable 儲存一個資料表的記儲存一個資料表的記錄資料,每一個錄資料,每一個 DataRowDataRow 物件就是一筆記錄。物件就是一筆記錄。

在建立好在建立好 ConnectionConnection 物件的資料庫連結後,我物件的資料庫連結後,我們使用們使用 DataAdapterDataAdapter 物件的物件的 FillFill 方法將資料表方法將資料表的資料填入的資料填入 DataSetDataSet 物件,也就是資料表的物件,也就是資料表的DataTableDataTable 物件。物件。 DataAdapterDataAdapter 物件分為兩種:物件分為兩種:• OLE DBOLE DB ::使用使用 OleDbDataAdapterOleDbDataAdapter 物件物件• SQL ServerSQL Server ::使用使用 SqlDataAdapterSqlDataAdapter 物件物件

Page 13: 第14章  ADO.NET 存取資料庫

1313

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀物件讀取資料庫取資料庫 -- 說明說明

VB.NETVB.NET 應用程式使用應用程式使用 ADO.NETADO.NET 存取資料庫最存取資料庫最簡單且快速的方式是使用簡單且快速的方式是使用 DataReaderDataReader 物件。物件。

以連結以連結 AccessAccess 資料庫為例,在程式碼使用資料庫為例,在程式碼使用ADO.NETADO.NET 時,需要使用時,需要使用 ImportsImports 關鍵字匯入關鍵字匯入OLE DBOLE DB 所需的名稱空間所需的名稱空間 NamespaceNamespace ,如下所,如下所示:示:Imports System.Data.OleDbImports System.Data.OleDb

使用使用 SQL ServerSQL Server 資料庫,其匯入的名稱空間,資料庫,其匯入的名稱空間,如下所示:如下所示:Imports System.Data.SqlClientImports System.Data.SqlClient

Page 14: 第14章  ADO.NET 存取資料庫

1414

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀取資料物件讀取資料庫庫 -- 步驟步驟 11

步驟1:建立和開啟資料庫連結步驟1:建立和開啟資料庫連結• 首先我們需要建立首先我們需要建立 ConnectionConnection 物件來連結資料物件來連結資料

庫,如下所示:庫,如下所示:Dim objCon As OleDbConnectionDim objCon As OleDbConnectionobjCon = New OleDbConnection(strDbCon)objCon = New OleDbConnection(strDbCon)

• StrDbConStrDbCon 字串變數指定資料來源的字串,如下字串變數指定資料來源的字串,如下所示:所示:

strDbCon = "strDbCon = "ProviderProvider=Microsoft.Jet.OLEDB.4.0;=Microsoft.Jet.OLEDB.4.0;“ & _“ & _

“ “Data SourceData Source=..\..\Books.mdb=..\..\Books.mdb""

• 開啟資料庫連結開啟資料庫連結 objCon.open()objCon.open()

Page 15: 第14章  ADO.NET 存取資料庫

1515

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀物件讀取資料庫取資料庫 -- 步驟步驟 22

步驟2:建立步驟2:建立 CommandCommand 物件物件 在開啟資料庫連結後,就可以建立在開啟資料庫連結後,就可以建立

CommandCommand 物件,並且指定欲執行的物件,並且指定欲執行的 SQLSQL 指指令字串,如下所示:令字串,如下所示:

Dim objCmd As OleDbCommand objCmd = _Dim objCmd As OleDbCommand objCmd = _

New OleDbCommand("SELECT * FROM Book", objCon)New OleDbCommand("SELECT * FROM Book", objCon)

Page 16: 第14章  ADO.NET 存取資料庫

1616

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀物件讀取資料庫取資料庫 -- 步驟步驟 33

步驟3:取得步驟3:取得 DataReaderDataReader 物件物件 在建立好在建立好 CommandCommand 物件後,接著就可以物件後,接著就可以

使用使用 ExecuteReaderExecuteReader 方法執行方法執行 SQLSQL 指令指令取得取得 DataReaderDataReader 物件,如下所示:物件,如下所示:Dim objDataReader As OleDbDataReaderDim objDataReader As OleDbDataReader

objDataReader = objCmd.ExecuteReader()objDataReader = objCmd.ExecuteReader()

上述程式碼取得上述程式碼取得 DataReaderDataReader 物件物件objDataReaderobjDataReader。。

Page 17: 第14章  ADO.NET 存取資料庫

1717

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀物件讀取資料庫取資料庫 -- 步驟步驟 3 3 ExecuteExecute 方法方法

Execute方法 說明

ExecuteNonQuery 執行 SQL指令但是不會傳回任何資料,通常是使用在第

14-5節資料庫操作指令 INSERT、DELETE和 UPDATE

ExecuteScalar 執行 SQL指令從資料表只取得一個欄位資料,如果是資

料表,就是第 1筆記錄的第 1個欄位值

ExecuteReader 執行 SQL指令傳回 DataReader物件

Page 18: 第14章  ADO.NET 存取資料庫

1818

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀物件讀取資料庫取資料庫 -- 步驟步驟 44

步驟4:取出查詢結果的資料表記錄資料步驟4:取出查詢結果的資料表記錄資料 DataReaderDataReader 物件如同循序檔案一般,當執行物件如同循序檔案一般,當執行

SQLSQL 指令取得指令取得 DataReaderDataReader 物件後,就如同開啟物件後,就如同開啟一個讀取的一個讀取的 DataReaderDataReader 檔案,程式碼需要使用檔案,程式碼需要使用WhileWhile 迴圈讀取資料表的每一筆記錄,如下所示:迴圈讀取資料表的每一筆記錄,如下所示:

While objDataReader.Read()While objDataReader.Read() out &= objDataReader.Item("BookID") & " "out &= objDataReader.Item("BookID") & " " out &= objDataReader.Item("BookTitle") & " "out &= objDataReader.Item("BookTitle") & " " out &= objDataReader.Item("BookPrice") & _out &= objDataReader.Item("BookPrice") & _ vbNewLinevbNewLineEnd WhileEnd While

Page 19: 第14章  ADO.NET 存取資料庫

1919

DataReader DataReader 屬性屬性 取得指定的欄位值: 取得指定的欄位值:

objDataReader.Item(“BookTitle”)objDataReader.Item(“BookTitle”)

objDataReader.Item(3)objDataReader.Item(3) ::由 由 0 0 開始開始 FieldCount: FieldCount: 取得欄位數取得欄位數 IsClosed: IsClosed: 檢查是否關閉,檢查是否關閉, True True 表示關表示關

閉閉

Page 20: 第14章  ADO.NET 存取資料庫

2020

14-2-2 14-2-2 使用使用 DataReaderDataReader 物件讀物件讀取資料庫取資料庫 -- 步驟步驟 55

步驟5:關閉步驟5:關閉 DataReaderDataReader 和資料庫連結和資料庫連結 最後需要關閉最後需要關閉 DataReaderDataReader 物件和資料庫物件和資料庫

連結的連結的 ConnectionConnection 物件,如下所示:物件,如下所示:objDataReader.Close()objDataReader.Close()

objCon.Close()objCon.Close()

上述程式碼使用上述程式碼使用 CloseClose 方法關閉方法關閉DataReaderDataReader和和 ConnectionConnection 物件。物件。

Page 21: 第14章  ADO.NET 存取資料庫

2121

14-3 14-3 DataSetDataSet 物件與物件與 DataGridDataGrid控制項控制項

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet 物件物件 14-3-2 14-3-2 DataGridDataGrid 控制項顯示資料表控制項顯示資料表

Page 22: 第14章  ADO.NET 存取資料庫

2222

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet物件物件 -- 說明說明

DataSetDataSet 物件可以建立儲存在記憶體中的物件可以建立儲存在記憶體中的資料庫,每一個資料表是一個資料庫,每一個資料表是一個 DataTableDataTable物件。物件。

不同於不同於 DataReaderDataReader 物件如同循序檔案,物件如同循序檔案,我們需要將資料表的記錄資料先填入我們需要將資料表的記錄資料先填入DataSetDataSet 物件,然後再來顯示物件,然後再來顯示 DataSetDataSet 物物件的記錄資料。件的記錄資料。

Page 23: 第14章  ADO.NET 存取資料庫

2323

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet物件物件 -- 步驟步驟 11

步驟1:建立步驟1:建立 ConnectionConnection 物件物件 如同上一節的如同上一節的 DataReaderDataReader 物件,我們還物件,我們還

是需要使用是需要使用 ConnectionConnection 物件建立資料連物件建立資料連結,如下所示:結,如下所示:objCon = New OleDbConnection(strDbCon)objCon = New OleDbConnection(strDbCon)

objCon.Open()objCon.Open()

上述程式碼建立上述程式碼建立 objConobjCon 的資料連結物件,的資料連結物件,然後開啟資料庫連結。然後開啟資料庫連結。

Page 24: 第14章  ADO.NET 存取資料庫

2424

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet物件物件 -- 步驟步驟 22

步驟2:建立步驟2:建立 DataAdapterDataAdapter 物件物件 在在 DataSetDataSet 物件是使用物件是使用 DataAdapterDataAdapter 物件取得記物件取得記

錄資料,這個物件屬於錄資料,這個物件屬於 DataSetDataSet和和 ConnectionConnection 物物件資料來源間的橋樑,以便將資料表填入件資料來源間的橋樑,以便將資料表填入 DataSetDataSet物件。物件。

DataAdapterDataAdapter 物件也擁有兩個版本,物件也擁有兩個版本, SQL ServerSQL Server的是的是 SqlDataAdapterSqlDataAdapter ,,以本節為例是使用以本節為例是使用 OLE OLE DBDB的的 OleDbDataAdapterOleDbDataAdapter ,,如下所示:如下所示:Dim objDataAdapter As OleDbDataAdapterDim objDataAdapter As OleDbDataAdapter

objDataAdapter = New OleDbDataAdapter( _objDataAdapter = New OleDbDataAdapter( _

"SELECT * FROM Book", objCon)"SELECT * FROM Book", objCon)

Page 25: 第14章  ADO.NET 存取資料庫

2525

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet物件物件 -- 步驟步驟 33

步驟3:建立步驟3:建立 DataSetDataSet 物件填入記錄資料物件填入記錄資料 現在我們就可以建立現在我們就可以建立 DataSetDataSet 物件,執行物件,執行

DataAdapterDataAdapter的的 SQLSQL 查詢指令,將記錄查詢指令,將記錄資料填入資料填入 DataSetDataSet 物件,如下所示:物件,如下所示:Dim objDataSet As DataSet = New DataSet()Dim objDataSet As DataSet = New DataSet()

objDataAdapter.Fill(objDataSet, "Books")objDataAdapter.Fill(objDataSet, "Books")

DataTable 物件名稱

Page 26: 第14章  ADO.NET 存取資料庫

2626

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet 物件物件 -- 步步驟驟 44

步驟4:取出查詢結果的資料表記錄資料步驟4:取出查詢結果的資料表記錄資料 在使用在使用 DataAdapterDataAdapter 物件將資料表記錄填入物件將資料表記錄填入

DataSetDataSet 後,請使用後,請使用 For EachFor Each 迴圈取出每一個迴圈取出每一個DataRowDataRow 物件,也就是一筆記錄,如下所示:物件,也就是一筆記錄,如下所示:Dim objRow As DataRowDim objRow As DataRowFor Each objRow in objDataSet.Tables("Books").RowsFor Each objRow in objDataSet.Tables("Books").Rows out &= objRow("BookID") & vbNewLineout &= objRow("BookID") & vbNewLine out &= objRow("BookTitle") & vbNewLineout &= objRow("BookTitle") & vbNewLine ………… …………NextNext

如果需要指定第幾筆紀錄如果需要指定第幾筆紀錄objRow= objDataset.Tables(“Books”).Rows(0)objRow= objDataset.Tables(“Books”).Rows(0)

objDataset.Tables(“Books”).Rows.Count objDataset.Tables(“Books”).Rows.Count 可以得到可以得到共幾筆紀錄共幾筆紀錄

Page 27: 第14章  ADO.NET 存取資料庫

2727

14-3-1 14-3-1 將資料表填入將資料表填入 DataSetDataSet物件物件 -- 步驟步驟 55

步驟5:關閉資料庫連結步驟5:關閉資料庫連結 最後記得關閉資料庫連結,以此例建立的最後記得關閉資料庫連結,以此例建立的

ConnectionConnection 物件為物件為 objConobjCon ,,如下所示:如下所示:objCon.Close()objCon.Close()

Page 28: 第14章  ADO.NET 存取資料庫

2828

14-3-2 14-3-2 DataGridDataGrid 控制項顯示資控制項顯示資料表料表 -- 說明說明

DataGridDataGrid 控制項可以將資料來源的資料以控制項可以將資料來源的資料以表格方式顯示,例如:將資料表的記錄資表格方式顯示,例如:將資料表的記錄資料如同料如同 ExcelExcel 試算表一般的顯示每筆記錄試算表一般的顯示每筆記錄和欄位資料。和欄位資料。

Page 29: 第14章  ADO.NET 存取資料庫

2929

14-3-2 14-3-2 DataGridDataGrid 控制項顯示資控制項顯示資料表料表 -- 建立建立

Page 30: 第14章  ADO.NET 存取資料庫

3030

14-3-2 14-3-2 DataGridDataGrid 控制項顯示資控制項顯示資料表料表 -- 屬性屬性

屬性 說明

Name 控制項名稱

CaptionText 控制項的標題文字

AllowSorting 設定是否可按一下資料欄的標頭,就以此欄位進行排序,預

設值 True可以,False為不可以

DataSource 設定控制項的資料來源,可以是 DataSet和 DataTable等物件

ReadOnly 控制項是否為唯讀,預設值 False為不是,True為唯讀

Page 31: 第14章  ADO.NET 存取資料庫

3131

14-3-2 14-3-2 DataGridDataGrid 控制項顯示資控制項顯示資料表料表 -- 指定資料來源指定資料來源

當表單新增當表單新增 DataGridDataGrid 控制項後,只需將控制項後,只需將資料表的記錄資料填入資料表的記錄資料填入 DataSetDataSet 物件,就物件,就可以指定可以指定 DataGridDataGrid 控制項的控制項的DataSourceDataSource 屬性,如下所示:屬性,如下所示:dtgOutput.DataSource = _dtgOutput.DataSource = _

objDataSet.Tables("Books")objDataSet.Tables("Books")

上述程式碼將上述程式碼將 DataGridDataGrid 控制項的資料來控制項的資料來源指定成源指定成 DataSetDataSet 物件名為物件名為 BooksBooks的的DataTableDataTable 物件。物件。

Page 32: 第14章  ADO.NET 存取資料庫

3232

14-4 14-4 SQLSQL 的資料庫查詢的資料庫查詢 14-4-1 14-4-1 SQLSQL 語言的基礎語言的基礎 14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令

Page 33: 第14章  ADO.NET 存取資料庫

3333

14-4-1 14-4-1 SQLSQL 語言的基礎語言的基礎 -- 說明說明 「「 SQLSQL」」 (Structured Query Language)(Structured Query Language)

為「為「 ANSIANSI」」 (American National (American National Standards Institute) Standards Institute) 標準的資料庫語標準的資料庫語言,言, SQLSQL 指令語法可以用來存取和更新資料指令語法可以用來存取和更新資料庫的記錄,目前庫的記錄,目前 AccessAccess、、 SQL SQL ServerServer、、 InformixInformix、、 OracleOracle和和 SybaseSybase 等等資料庫系統都支援資料庫系統都支援 ANSIANSI的的 SQLSQL 語言。語言。

Page 34: 第14章  ADO.NET 存取資料庫

3434

14-4-1 14-4-1 SQLSQL 語言的基礎語言的基礎 -- 指令指令

SQLSQL 語言的指令可以分為語言的指令可以分為 44 大部分,如下表所示:大部分,如下表所示:• 「資料定義語言「資料定義語言 DDLDDL」」 (Data Definition (Data Definition

Language)Language) ::屬於資料表建立和欄位定義的屬於資料表建立和欄位定義的 SQLSQL 指令。指令。• 「資料操作語言「資料操作語言 DMLDML」」 (Data Manipulation (Data Manipulation

Language)Language) ::屬於資料表記錄插入、刪除和更新指令。屬於資料表記錄插入、刪除和更新指令。• 「資料查詢語言「資料查詢語言 DQLDQL」」 (Data Query (Data Query

Language)Language) ::屬於資料表查詢指令,只有一個屬於資料表查詢指令,只有一個SELECTSELECT 指令。指令。

• 「資料控制語言「資料控制語言 DCLDCL」」 (Data Control (Data Control Language)Language) ::屬於資料庫安全設定和權限管理指令。屬於資料庫安全設定和權限管理指令。

Page 35: 第14章  ADO.NET 存取資料庫

3535

14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令 -- 語法語法 在在 SQLSQL 語言的資料查詢指令只有一個語言的資料查詢指令只有一個

SELECTSELECT 指令,完整的指令語法如下所示:指令,完整的指令語法如下所示:SELECT SELECT 欄位欄位 1, 1, 欄位欄位 2 2 FROM FROM 資料表 資料表 WHERE conditionsWHERE conditions

上述上述 SELECTSELECT 指令的欄位指令的欄位 1~21~2 為記錄的欄為記錄的欄位,位, conditionsconditions 為查詢條件,這個指令使為查詢條件,這個指令使用口語來說是「從資料表取回符合用口語來說是「從資料表取回符合WHEREWHERE 子句條件的記錄,顯示欄位子句條件的記錄,顯示欄位 11 和和22 」。」。

Page 36: 第14章  ADO.NET 存取資料庫

3636

14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令 -“*”-“*” 記錄記錄欄位欄位

使用使用 "*""*" 符號代表所有資料表的欄位,表示符號代表所有資料表的欄位,表示取回資料表記錄的所有欄位,如下所示:取回資料表記錄的所有欄位,如下所示:SELECT * FROM BookSELECT * FROM Book

上述指令沒有上述指令沒有 WHEREWHERE 子句,所以是將資子句,所以是將資料表內所有的記錄和欄位取回。料表內所有的記錄和欄位取回。

Page 37: 第14章  ADO.NET 存取資料庫

3737

14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令 -- 單一查單一查詢條件的詢條件的 WHEREWHERE 子句子句

SQLSQL 查詢指令的單一條件,查詢指令的單一條件, WHEREWHERE子句的基本子句的基本規則和範例,如下所示:規則和範例,如下所示:• 文字欄位要加上單引號,如下所示:文字欄位要加上單引號,如下所示:SELECT * FROM Book WHERE BookID='F8111A'SELECT * FROM Book WHERE BookID='F8111A'• 數字欄位並不需要額外的字元括起,如下所示:數字欄位並不需要額外的字元括起,如下所示:SELECT * FROM Book WHERE BookPrice>550SELECT * FROM Book WHERE BookPrice>550• 文字的欄位可以使用【文字的欄位可以使用【 LIKELIKE】】包含運算子配合包含運算子配合 "%""%" 萬萬

用字元,此時查詢的條件子句只需包含的子字串就符用字元,此時查詢的條件子句只需包含的子字串就符合條件,如下所示:合條件,如下所示:

SELECT * FROM Book WHERE BookID LIKE '%1%'SELECT * FROM Book WHERE BookID LIKE '%1%'• 數字或日期欄位可以使用數字或日期欄位可以使用 <><> 、、 >> 、、 << 、、 >=>=和和 <=<=不等不等

於、大於、小於、大於等於和小於等於等運算子建立於、大於、小於、大於等於和小於等於等運算子建立多樣化的查詢條件。多樣化的查詢條件。

Page 38: 第14章  ADO.NET 存取資料庫

3838

14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令 --多重查多重查詢條件的詢條件的 WHEREWHERE 子句子句

WHEREWHERE子句的查詢條件可以使用子句的查詢條件可以使用 ANDAND和和 OROR邏邏輯運算子連接,其基本語法,如下所示:輯運算子連接,其基本語法,如下所示:• ANDAND 且運算子:且運算子:連接的前後條件都必須成立,整個條連接的前後條件都必須成立,整個條

件才能成立,例如:書號包含件才能成立,例如:書號包含 "3""3"且書名有且書名有 "" 研究研究 ""的的子字串,如下所示:子字串,如下所示:

SELECT * FROM Book WHERE BookID LIKE '%3%' AND SELECT * FROM Book WHERE BookID LIKE '%3%' AND BookTitle LIKE '%BookTitle LIKE '% 研究研究 %'%'

• OROR 或運算子:或運算子:連接的前後條件只需任何一個成立即可,連接的前後條件只需任何一個成立即可,例如:書號包含例如:書號包含 "3""3"或書名有或書名有 "" 研究研究 ""的子字串,如下的子字串,如下所示:所示:

SELECT * FROM Book WHERE BookID LIKE '%3%' OR SELECT * FROM Book WHERE BookID LIKE '%3%' OR BookTitle LIKE '%BookTitle LIKE '% 研究研究 %'%'

Page 39: 第14章  ADO.NET 存取資料庫

3939

14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令 --排序輸排序輸出出

SQLSQL 的查詢結果可以指定欄位進行由小到大,或的查詢結果可以指定欄位進行由小到大,或由大到小排序,只需在由大到小排序,只需在 SELECTSELECT 指令的最後加上指令的最後加上ORDER BYORDER BY子句即可,如下所示:子句即可,如下所示:SELECT * FROM Book WHERE BookPrice>=500 SELECT * FROM Book WHERE BookPrice>=500

ORDER BY BookPriceORDER BY BookPrice 上述查詢結果使用上述查詢結果使用 BookPriceBookPrice 欄位排序,預設是欄位排序,預設是

由小到大的由小到大的 ASCASC ,,如果想倒過來由大到小,只需如果想倒過來由大到小,只需加上加上 DESCDESC ,,如下所示:如下所示:SELECT * FROM Book WHERE BookPrice>=500 SELECT * FROM Book WHERE BookPrice>=500

ORDER BY BookPrice DESCORDER BY BookPrice DESC

Page 40: 第14章  ADO.NET 存取資料庫

4040

14-4-2 14-4-2 SQLSQL 的查詢指令的查詢指令 --SQLSQL 的的聚合函數聚合函數

函數 說明

Count(Column) 計算記錄筆數

Avg(Column) 計算欄位平均值

Max(Column) 取得記錄欄位的最大值

Min(Column) 取得記錄欄位的最小值

Sum(Column) 取得記錄欄位的總計

StDev(Column) 統計樣本的標準差

StDevP(Column) 統計母體的標準差

Var(Column) 統計樣本的變異數

VarP(Column) 統計母體的變異數

Page 41: 第14章  ADO.NET 存取資料庫

4141

14-5 14-5 SQLSQL 的資料庫操作的資料庫操作 14-5-1 14-5-1 資料庫操作的資料庫操作的 SQLSQL 指令指令 14-5-2 14-5-2 圖書資料管理程式圖書資料管理程式

Page 42: 第14章  ADO.NET 存取資料庫

4242

14-5-1 14-5-1 資料庫操作的資料庫操作的 SQLSQL 指指令令 --INSERTINSERT 插入記錄插入記錄 11

SQLSQL 插入記錄操作指令是新增一筆記錄到資料表,插入記錄操作指令是新增一筆記錄到資料表,INSERTINSERT 指令的語法格式,如下所示:指令的語法格式,如下所示:INSERT INTO table (column1,column2,…..) INSERT INTO table (column1,column2,…..)

VALUES ('value1', 'value2 ', …)VALUES ('value1', 'value2 ', …) INSERTINSERT 指令的注意事項,如下所示:指令的注意事項,如下所示:

• 不論是欄位或值的清單,都需要使用逗號分隔。不論是欄位或值的清單,都需要使用逗號分隔。• INSERTINSERT 指令指令 VALUESVALUES 的值,數值不用單引號包圍,字的值,數值不用單引號包圍,字

元需要單引號包圍,日期元需要單引號包圍,日期 //時間需要時間需要 "#""#" 符號括起。符號括起。• INSERTINSERT 指令的欄位名稱清單,並不需要和資料表定義指令的欄位名稱清單,並不需要和資料表定義

的欄位數目或順序相同,只需選擇需要資料的欄位,括的欄位數目或順序相同,只需選擇需要資料的欄位,括號內的欄位名稱順序需和號內的欄位名稱順序需和 VALUESVALUES 值的順序相同。值的順序相同。

Page 43: 第14章  ADO.NET 存取資料庫

4343

14-5-1 14-5-1 資料庫操作的資料庫操作的 SQLSQL 指指令令 --INSERTINSERT 插入記錄插入記錄 22

在資料表在資料表 BookBook 插入一筆圖書記錄的插入一筆圖書記錄的 SQLSQL 指指令,如下所示:令,如下所示:INSERT INTO Book INSERT INTO Book

(BookID,BookTitle,BookAuthor,BookPrice,BookP(BookID,BookTitle,BookAuthor,BookPrice,BookP

ubDate) VALUES ('F8915','ASPubDate) VALUES ('F8915','ASP 網頁製作徹底研究網頁製作徹底研究 ','',' 陳會安陳會安 ',',580,#06/06/2000#)580,#06/06/2000#)

上述上述 SQLSQL 指令中欄位值為字串時使用單引指令中欄位值為字串時使用單引號,數字值沒有,日期號,數字值沒有,日期 // 時間加上時間加上 "#""#" 符號。符號。

Page 44: 第14章  ADO.NET 存取資料庫

4444

14-5-1 14-5-1 資料庫操作的資料庫操作的 SQLSQL 指指令令 --DELETEDELETE 刪除記錄刪除記錄

SQLSQL刪除記錄指令是將資料表內符合條件的記錄刪除記錄指令是將資料表內符合條件的記錄通通刪除掉,通通刪除掉, DELETEDELETE 指令的語法格式,如下所指令的語法格式,如下所示:示:DELETE FROM table WHERE conditionsDELETE FROM table WHERE conditions

DELETEDELETE 指令的注意事項,如下所示:指令的注意事項,如下所示:• WHEREWHERE子句是子句是 DELETEDELETE 指令的必要元素,如果沒有指令的必要元素,如果沒有

WHEREWHERE子句,資料表內的所有記錄都會刪除。子句,資料表內的所有記錄都會刪除。 在資料表在資料表 BookBook刪除一筆圖書記錄的刪除一筆圖書記錄的 SQLSQL 指令,指令,

如下所示:如下所示:DELETE FROM Book WHERE BookID='F8915'DELETE FROM Book WHERE BookID='F8915'

Page 45: 第14章  ADO.NET 存取資料庫

4545

14-5-1 14-5-1 資料庫操作的資料庫操作的 SQLSQL 指指令令 --UPDATEUPDATE 更新記錄更新記錄 11

SQLSQL 更新記錄指令是將資料表內符合條件的記錄,更新記錄指令是將資料表內符合條件的記錄,更新指定欄位的內容,更新指定欄位的內容, UPDAT EUPDAT E 指令的語法格式,指令的語法格式,如下所示:如下所示:UPDATE table SET column1 = 'value1' WHERE UPDATE table SET column1 = 'value1' WHERE

conditionsconditions 如果更新的欄位不只一個,請使用逗號分隔,其語法如果更新的欄位不只一個,請使用逗號分隔,其語法

格式,如下所示:格式,如下所示:UPDATE table SET column1 = 'value1' , column2 = UPDATE table SET column1 = 'value1' , column2 =

'value2' WHERE conditions'value2' WHERE conditions UPDATEUPDATE 指令的注意事項,如下所示:指令的注意事項,如下所示:

• WHEREWHERE子句是必要元素,如果沒有子句是必要元素,如果沒有 WHEREWHERE子句,資料子句,資料表內所有記錄欄位都會更新。表內所有記錄欄位都會更新。

• 更新欄位值是數值不用單引號包圍,字元需要使用單引號更新欄位值是數值不用單引號包圍,字元需要使用單引號包圍,日期時間為「包圍,日期時間為「 ##」符號。」符號。

Page 46: 第14章  ADO.NET 存取資料庫

4646

14-5-1 14-5-1 資料庫操作的資料庫操作的 SQLSQL 指指令令 --UPDATEUPDATE 更新記錄更新記錄 22

在資料表在資料表 BookBook 更改記錄圖書資料的更改記錄圖書資料的 SQLSQL指令,如下所示:指令,如下所示:UPDATE Book SET BookPrice=650, UPDATE Book SET BookPrice=650,

BookPubDate=#6/15/2002# WHEREBookPubDate=#6/15/2002# WHERE

BookID='F8534A'BookID='F8534A'

上述上述 SQLSQL 指令的指令的 WHEREWHERE 條件為圖書書號條件為圖書書號BookIDBookID 欄位,然後使用欄位,然後使用 SETSET 子句更新欄子句更新欄位資料。位資料。

Page 47: 第14章  ADO.NET 存取資料庫

4747

14-5-2 14-5-2 圖書資料管理程式圖書資料管理程式 在在 VB.NETVB.NET 應用程式的程式碼只需在開啟資料庫應用程式的程式碼只需在開啟資料庫

連結和建立連結和建立 CommandCommand 物件後,就可以使用物件後,就可以使用CommandCommand 物件的物件的 ExecuteNonQueryExecuteNonQuery 方法執方法執行行 SQLSQL 指令,如下所示:指令,如下所示:Dim intRowsAffected As IntegerDim intRowsAffected As Integer

intRowsAffected = objCmd.ExecuteNonQuery()intRowsAffected = objCmd.ExecuteNonQuery() 上述程式碼的變數上述程式碼的變數 intRowsAffectedintRowsAffected 傳回資料表傳回資料表影響的記錄數,因為是使用影響的記錄數,因為是使用 ExecuteNonQueryExecuteNonQuery方法執行方法執行 SQLSQL 指令,所以並不會傳回指令,所以並不會傳回DataReaderDataReader 記錄資料。記錄資料。

Page 48: 第14章  ADO.NET 存取資料庫

4848

14-5-2 14-5-2 圖書資料管理程式圖書資料管理程式 不只 不只 DataGrid DataGrid 可以用 可以用 Data Binding Data Binding 方式來為方式來為

其 其 DataSource DataSource 指定資料來源,只要控制項有 指定資料來源,只要控制項有 DataSource DataSource 欄位都可以用 欄位都可以用 Data Binding Data Binding 方式方式決定其展現內容。如 決定其展現內容。如 ListBoxListBox、、 ComboBox ComboBox 等等均可以此方法動態決定其內容選項。均可以此方法動態決定其內容選項。

ListBox ListBox 決定 決定 DataSource DataSource 之後,需要指定下列之後,需要指定下列屬性:屬性:• DisplayMember: DisplayMember: 選項顯示的欄位選項顯示的欄位• ValueMember: ValueMember: 選擇的值的欄位,以選擇的值的欄位,以

ListBox1.SelectedValue ListBox1.SelectedValue 來得到此選項之值來得到此選項之值

Page 49: 第14章  ADO.NET 存取資料庫

4949

補充:直接由 補充:直接由 OleDbDataAdapter OleDbDataAdapter 控制項來指定 資料庫及控制項來指定 資料庫及 DataSet DataSet

步驟一:拖曳 OleDdDataAdapter

Page 50: 第14章  ADO.NET 存取資料庫

5050

步驟二:按下一步

Page 51: 第14章  ADO.NET 存取資料庫

5151

步驟三:如果為新的資料庫,按 “新增連接” 鈕

Page 52: 第14章  ADO.NET 存取資料庫

5252

步驟四:於 “提供者” TabPage選擇適當的連線資料, Access 應選擇 Microsoft Jet 4.0 OLE DB Provider ,按下一步

Page 53: 第14章  ADO.NET 存取資料庫

5353

步驟五:按 “…” 鈕

Page 54: 第14章  ADO.NET 存取資料庫

5454

步驟六:選擇 資料庫後按 “開啟” 鈕,然後於資料連結內容 ( 步驟五 ) 視窗測試連線成功後,按 “確定”

Page 55: 第14章  ADO.NET 存取資料庫

5555

步驟七:剛剛選定之資料庫資訊會顯示於 “資料佩接器組態精靈”視窗,按 “下一步”

Page 56: 第14章  ADO.NET 存取資料庫

5656

步驟八:按 “下一步”

Page 57: 第14章  ADO.NET 存取資料庫

5757

步驟九:輸入 SQL語法

Page 58: 第14章  ADO.NET 存取資料庫

5858

步驟十:按 “完成”

Page 59: 第14章  ADO.NET 存取資料庫

5959

自動產生 OldDbConnection1物件 及 OleDbDataAdapter1物件,程式中可以直接使用