1 / 59

第14章 ADO.NET 存取資料庫

第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 什麼是資料庫.

Download Presentation

第14章 ADO.NET 存取資料庫

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 14-1-2 使用Access建立資料庫

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

  6. 14-2-1 什麼是ADO.NET-說明 • ADO.NET是微軟新一代的技術,它是「ADO」(ActiveX Data Object)元件的後繼者。 • ADO.NET的目的是提供一致的物件模型,存取和編輯資料來源的資料,提供一致的資料處理方式,資料來源並不限於資料庫,幾乎任何資料來源(如 EXCEL、文字檔、Access等)都可以,以VB.NET應用程式來說,使用ADO.NET主要的目的是存取資料庫。

  7. ADO.NET DataReader 1 Command 1 1 表單控制項 (Data Binding) Connection 2 2 DataAdapter 2 2 Data Source DataSet DataTable

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

  9. 14-2-1 什麼是ADO.NET-Connection物件 • Connection物件可以建立與存取資料來源的連結,以資料庫來說Connection物件還負責初始資料庫,Connection物件一共分為兩種: • OLE DB:使用OleDbConnection物件 • SQL Server:使用SqlConnection物件

  10. 14-2-1 什麼是ADO.NET-Command物件 • Command物件可以對資料來源執行指令,以資料庫的資料來源而言,就是執行SQL指令,在建立Connection物件建立資料庫連結後,就可以使用Command物件執行SQL指令。 • Command物件也分為兩種: • OLE DB:使用OleDbCommand物件 • SQL Server:使用SqlCommand物件

  11. 14-2-1 什麼是ADO.NET-DataReader物件 • ADO.NET的DataReader物件可以從資料來源使用Command物件執行SQL指令,取得如同循序檔案一般唯讀且單向的資料流。因為DataReader只在記憶體儲存一筆記錄,所以能夠提升應用程式的執行效能,並且降低系統的負荷。 • DataReader物件分為兩種: • OLE DB:使用OleDbDataReader物件 • SQL Server:使用SqlDataReader物件

  12. 14-2-1 什麼是ADO.NET-DataSet和DataTable物件 • DataSet物件是由DataTable物件所組成,DataSet物件可以代表一個儲存在記憶體的資料庫,每一個DataTable儲存一個資料表的記錄資料,每一個DataRow物件就是一筆記錄。 • 在建立好Connection物件的資料庫連結後,我們使用DataAdapter物件的Fill方法將資料表的資料填入DataSet物件,也就是資料表的DataTable物件。DataAdapter物件分為兩種: • OLE DB:使用OleDbDataAdapter物件 • SQL Server:使用SqlDataAdapter物件

  13. 14-2-2 使用DataReader物件讀取資料庫-說明 • VB.NET應用程式使用ADO.NET存取資料庫最簡單且快速的方式是使用DataReader物件。 • 以連結Access資料庫為例,在程式碼使用ADO.NET時,需要使用Imports關鍵字匯入OLE DB所需的名稱空間Namespace,如下所示: Imports System.Data.OleDb • 使用SQL Server資料庫,其匯入的名稱空間,如下所示: Imports System.Data.SqlClient

  14. 14-2-2 使用DataReader物件讀取資料庫-步驟1 • 步驟1:建立和開啟資料庫連結 • 首先我們需要建立Connection物件來連結資料庫,如下所示: Dim objCon As OleDbConnection objCon = New OleDbConnection(strDbCon) • StrDbCon字串變數指定資料來源的字串,如下所示: strDbCon = "Provider=Microsoft.Jet.OLEDB.4.0;“ & _ “Data Source=..\..\Books.mdb" • 開啟資料庫連結 objCon.open()

  15. 14-2-2 使用DataReader物件讀取資料庫-步驟2 • 步驟2:建立Command物件 • 在開啟資料庫連結後,就可以建立Command物件,並且指定欲執行的SQL指令字串,如下所示: Dim objCmd As OleDbCommand objCmd = _ New OleDbCommand("SELECT * FROM Book", objCon)

  16. 14-2-2 使用DataReader物件讀取資料庫-步驟3 • 步驟3:取得DataReader物件 • 在建立好Command物件後,接著就可以使用ExecuteReader方法執行SQL指令取得DataReader物件,如下所示: Dim objDataReader As OleDbDataReader objDataReader = objCmd.ExecuteReader() • 上述程式碼取得DataReader物件objDataReader。

  17. 14-2-2 使用DataReader物件讀取資料庫-步驟3 Execute方法

  18. 14-2-2 使用DataReader物件讀取資料庫-步驟4 • 步驟4:取出查詢結果的資料表記錄資料 • DataReader物件如同循序檔案一般,當執行SQL指令取得DataReader物件後,就如同開啟一個讀取的DataReader檔案,程式碼需要使用While迴圈讀取資料表的每一筆記錄,如下所示: While objDataReader.Read() out &= objDataReader.Item("BookID") & " " out &= objDataReader.Item("BookTitle") & " " out &= objDataReader.Item("BookPrice") & _ vbNewLine End While

  19. DataReader 屬性 • 取得指定的欄位值: objDataReader.Item(“BookTitle”) objDataReader.Item(3):由 0 開始 • FieldCount: 取得欄位數 • IsClosed: 檢查是否關閉,True 表示關閉

  20. 14-2-2 使用DataReader物件讀取資料庫-步驟5 • 步驟5:關閉DataReader和資料庫連結 • 最後需要關閉DataReader物件和資料庫連結的Connection物件,如下所示: objDataReader.Close() objCon.Close() • 上述程式碼使用Close方法關閉DataReader和Connection物件。

  21. 14-3 DataSet物件與DataGrid控制項 • 14-3-1 將資料表填入DataSet物件 • 14-3-2 DataGrid控制項顯示資料表

  22. 14-3-1 將資料表填入DataSet物件-說明 • DataSet物件可以建立儲存在記憶體中的資料庫,每一個資料表是一個DataTable物件。 • 不同於DataReader物件如同循序檔案,我們需要將資料表的記錄資料先填入DataSet物件,然後再來顯示DataSet物件的記錄資料。

  23. 14-3-1 將資料表填入DataSet物件-步驟1 • 步驟1:建立Connection物件 • 如同上一節的DataReader物件,我們還是需要使用Connection物件建立資料連結,如下所示: objCon = New OleDbConnection(strDbCon) objCon.Open() • 上述程式碼建立objCon的資料連結物件,然後開啟資料庫連結。

  24. 14-3-1 將資料表填入DataSet物件-步驟2 • 步驟2:建立DataAdapter物件 • 在DataSet物件是使用DataAdapter物件取得記錄資料,這個物件屬於DataSet和Connection物件資料來源間的橋樑,以便將資料表填入DataSet物件。 • DataAdapter物件也擁有兩個版本,SQL Server的是SqlDataAdapter,以本節為例是使用OLE DB的OleDbDataAdapter,如下所示: Dim objDataAdapter As OleDbDataAdapter objDataAdapter = New OleDbDataAdapter( _ "SELECT * FROM Book", objCon)

  25. 14-3-1 將資料表填入DataSet物件-步驟3 • 步驟3:建立DataSet物件填入記錄資料 • 現在我們就可以建立DataSet物件,執行DataAdapter的SQL查詢指令,將記錄資料填入DataSet物件,如下所示: Dim objDataSet As DataSet = New DataSet() objDataAdapter.Fill(objDataSet, "Books") DataTable 物件名稱

  26. 14-3-1 將資料表填入DataSet物件-步驟4 • 步驟4:取出查詢結果的資料表記錄資料 • 在使用DataAdapter物件將資料表記錄填入DataSet後,請使用For Each迴圈取出每一個DataRow物件,也就是一筆記錄,如下所示: Dim objRow As DataRow For Each objRow in objDataSet.Tables("Books").Rows out &= objRow("BookID") & vbNewLine out &= objRow("BookTitle") & vbNewLine ………… Next • 如果需要指定第幾筆紀錄 objRow= objDataset.Tables(“Books”).Rows(0) • objDataset.Tables(“Books”).Rows.Count 可以得到共幾筆紀錄

  27. 14-3-1 將資料表填入DataSet物件-步驟5 • 步驟5:關閉資料庫連結 • 最後記得關閉資料庫連結,以此例建立的Connection物件為objCon,如下所示: objCon.Close()

  28. 14-3-2 DataGrid控制項顯示資料表-說明 • DataGrid控制項可以將資料來源的資料以表格方式顯示,例如:將資料表的記錄資料如同Excel試算表一般的顯示每筆記錄和欄位資料。

  29. 14-3-2 DataGrid控制項顯示資料表-建立

  30. 14-3-2 DataGrid控制項顯示資料表-屬性

  31. 14-3-2 DataGrid控制項顯示資料表-指定資料來源 • 當表單新增DataGrid控制項後,只需將資料表的記錄資料填入DataSet物件,就可以指定DataGrid控制項的DataSource屬性,如下所示: dtgOutput.DataSource = _ objDataSet.Tables("Books") • 上述程式碼將DataGrid控制項的資料來源指定成DataSet物件名為Books的DataTable物件。

  32. 14-4 SQL的資料庫查詢 • 14-4-1 SQL語言的基礎 • 14-4-2 SQL的查詢指令

  33. 14-4-1 SQL語言的基礎-說明 • 「SQL」(Structured Query Language)為「ANSI」(American National Standards Institute) 標準的資料庫語言,SQL指令語法可以用來存取和更新資料庫的記錄,目前Access、SQL Server、Informix、Oracle和Sybase等資料庫系統都支援ANSI的SQL語言。

  34. 14-4-1 SQL語言的基礎-指令 • SQL語言的指令可以分為4大部分,如下表所示: • 「資料定義語言DDL」(Data Definition Language):屬於資料表建立和欄位定義的SQL指令。 • 「資料操作語言DML」(Data Manipulation Language):屬於資料表記錄插入、刪除和更新指令。 • 「資料查詢語言DQL」(Data Query Language):屬於資料表查詢指令,只有一個SELECT指令。 • 「資料控制語言DCL」(Data Control Language):屬於資料庫安全設定和權限管理指令。

  35. 14-4-2 SQL的查詢指令-語法 • 在SQL語言的資料查詢指令只有一個SELECT指令,完整的指令語法如下所示: SELECT 欄位1, 欄位2 FROM 資料表 WHERE conditions • 上述SELECT指令的欄位1~2為記錄的欄位,conditions為查詢條件,這個指令使用口語來說是「從資料表取回符合WHERE子句條件的記錄,顯示欄位1和2」。

  36. 14-4-2 SQL的查詢指令-“*”記錄欄位 • 使用"*"符號代表所有資料表的欄位,表示取回資料表記錄的所有欄位,如下所示: SELECT * FROM Book • 上述指令沒有WHERE子句,所以是將資料表內所有的記錄和欄位取回。

  37. 14-4-2 SQL的查詢指令-單一查詢條件的WHERE子句 • SQL查詢指令的單一條件,WHERE子句的基本規則和範例,如下所示: • 文字欄位要加上單引號,如下所示: SELECT * FROM Book WHERE BookID='F8111A' • 數字欄位並不需要額外的字元括起,如下所示: SELECT * FROM Book WHERE BookPrice>550 • 文字的欄位可以使用【LIKE】包含運算子配合"%"萬用字元,此時查詢的條件子句只需包含的子字串就符合條件,如下所示: SELECT * FROM Book WHERE BookID LIKE '%1%' • 數字或日期欄位可以使用<>、>、<、>=和<=不等於、大於、小於、大於等於和小於等於等運算子建立多樣化的查詢條件。

  38. 14-4-2 SQL的查詢指令-多重查詢條件的WHERE子句 • WHERE子句的查詢條件可以使用AND和OR邏輯運算子連接,其基本語法,如下所示: • AND且運算子:連接的前後條件都必須成立,整個條件才能成立,例如:書號包含"3"且書名有"研究"的子字串,如下所示: SELECT * FROM Book WHERE BookID LIKE '%3%' AND BookTitle LIKE '%研究%' • OR或運算子:連接的前後條件只需任何一個成立即可,例如:書號包含"3"或書名有"研究"的子字串,如下所示: SELECT * FROM Book WHERE BookID LIKE '%3%' OR BookTitle LIKE '%研究%'

  39. 14-4-2 SQL的查詢指令-排序輸出 • SQL的查詢結果可以指定欄位進行由小到大,或由大到小排序,只需在SELECT指令的最後加上ORDER BY子句即可,如下所示: SELECT * FROM Book WHERE BookPrice>=500 ORDER BY BookPrice • 上述查詢結果使用BookPrice欄位排序,預設是由小到大的ASC,如果想倒過來由大到小,只需加上DESC,如下所示: SELECT * FROM Book WHERE BookPrice>=500 ORDER BY BookPrice DESC

  40. 14-4-2 SQL的查詢指令-SQL的聚合函數

  41. 14-5 SQL的資料庫操作 • 14-5-1 資料庫操作的SQL指令 • 14-5-2 圖書資料管理程式

  42. 14-5-1 資料庫操作的SQL指令-INSERT插入記錄1 • SQL插入記錄操作指令是新增一筆記錄到資料表,INSERT指令的語法格式,如下所示: INSERT INTO table (column1,column2,…..) VALUES ('value1', 'value2 ', …) • INSERT指令的注意事項,如下所示: • 不論是欄位或值的清單,都需要使用逗號分隔。 • INSERT指令VALUES的值,數值不用單引號包圍,字元需要單引號包圍,日期/時間需要"#"符號括起。 • INSERT指令的欄位名稱清單,並不需要和資料表定義的欄位數目或順序相同,只需選擇需要資料的欄位,括號內的欄位名稱順序需和VALUES值的順序相同。

  43. 14-5-1 資料庫操作的SQL指令-INSERT插入記錄2 • 在資料表Book插入一筆圖書記錄的SQL指令,如下所示: INSERT INTO Book (BookID,BookTitle,BookAuthor,BookPrice,BookP ubDate) VALUES ('F8915','ASP網頁製作徹底研究','陳會安',580,#06/06/2000#) • 上述SQL指令中欄位值為字串時使用單引號,數字值沒有,日期/時間加上"#"符號。

  44. 14-5-1 資料庫操作的SQL指令-DELETE刪除記錄 • SQL刪除記錄指令是將資料表內符合條件的記錄通通刪除掉,DELETE指令的語法格式,如下所示: DELETE FROM table WHERE conditions • DELETE指令的注意事項,如下所示: • WHERE子句是DELETE指令的必要元素,如果沒有WHERE子句,資料表內的所有記錄都會刪除。 • 在資料表Book刪除一筆圖書記錄的SQL指令,如下所示: DELETE FROM Book WHERE BookID='F8915'

  45. 14-5-1 資料庫操作的SQL指令-UPDATE更新記錄1 • SQL更新記錄指令是將資料表內符合條件的記錄,更新指定欄位的內容,UPDAT E指令的語法格式,如下所示: UPDATE table SET column1 = 'value1' WHERE conditions • 如果更新的欄位不只一個,請使用逗號分隔,其語法格式,如下所示: UPDATE table SET column1 = 'value1' , column2 = 'value2' WHERE conditions • UPDATE指令的注意事項,如下所示: • WHERE子句是必要元素,如果沒有WHERE子句,資料表內所有記錄欄位都會更新。 • 更新欄位值是數值不用單引號包圍,字元需要使用單引號包圍,日期時間為「#」符號。

  46. 14-5-1 資料庫操作的SQL指令-UPDATE更新記錄2 • 在資料表Book更改記錄圖書資料的SQL指令,如下所示: UPDATE Book SET BookPrice=650, BookPubDate=#6/15/2002# WHERE BookID='F8534A' • 上述SQL指令的WHERE條件為圖書書號BookID欄位,然後使用SET子句更新欄位資料。

  47. 14-5-2 圖書資料管理程式 • 在VB.NET應用程式的程式碼只需在開啟資料庫連結和建立Command物件後,就可以使用Command物件的ExecuteNonQuery方法執行SQL指令,如下所示: Dim intRowsAffected As Integer intRowsAffected = objCmd.ExecuteNonQuery() • 上述程式碼的變數intRowsAffected傳回資料表影響的記錄數,因為是使用ExecuteNonQuery方法執行SQL指令,所以並不會傳回DataReader記錄資料。

  48. 14-5-2 圖書資料管理程式 • 不只 DataGrid 可以用 Data Binding 方式來為其 DataSource 指定資料來源,只要控制項有 DataSource 欄位都可以用 Data Binding 方式決定其展現內容。如 ListBox、ComboBox 等均可以此方法動態決定其內容選項。 • ListBox 決定 DataSource 之後,需要指定下列屬性: • DisplayMember: 選項顯示的欄位 • ValueMember: 選擇的值的欄位,以ListBox1.SelectedValue 來得到此選項之值

  49. 補充:直接由 OleDbDataAdapter 控制項來指定 資料庫及DataSet 步驟一:拖曳 OleDdDataAdapter

  50. 步驟二:按下一步

More Related