1 / 52

CH08

CH08. 資料庫 程式設計. ADO.NET資料庫程式設計. 資料庫觀念. 在上一章介紹過檔案系統之後,這一章要介紹的是另一個更重要的機制--『資料庫系統』。 資料庫也是一個檔案,但是和檔案系統有所不同的是,資料庫提供了結構化的資料儲存和檢索方式,讓查詢和存取更有效率。 檔案系統可以幫助我們將檔案儲存在硬碟 ( 或是其他的媒介 ) 當中,待需要的時候再載入電腦的記憶體當中。但是儲存於硬碟上的檔案是透過目錄與檔名的方式來存放,檔案的內容則是各種文字或是 Binary Code ,與現實生活當中的資料結構差異太大,往往並不容易分類搜尋或是檢索。

Télécharger la présentation

CH08

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. CH08

  2. 資料庫 程式設計

  3. ADO.NET資料庫程式設計 資料庫觀念 在上一章介紹過檔案系統之後,這一章要介紹的是另一個更重要的機制--『資料庫系統』。 資料庫也是一個檔案,但是和檔案系統有所不同的是,資料庫提供了結構化的資料儲存和檢索方式,讓查詢和存取更有效率。 檔案系統可以幫助我們將檔案儲存在硬碟(或是其他的媒介)當中,待需要的時候再載入電腦的記憶體當中。但是儲存於硬碟上的檔案是透過目錄與檔名的方式來存放,檔案的內容則是各種文字或是Binary Code,與現實生活當中的資料結構差異太大,往往並不容易分類搜尋或是檢索。 而資料庫就是在這個狀況下誕生的機制,它可以幫助使用者(或是程式設計師)以更具有結構的方式來儲存資料。

  4. ADO.NET資料庫程式設計 如果這些資料都透過檔案系統來儲存,當我們要利用電腦進行分類(例如找到所有1999年訂購『白起司』的客戶)恐怕是相當困難。因此就有了Access、SQL Server、Oracle等『資料庫系統』來幫助我們,對這些複雜的資料進行處理。 資料庫觀念 這個畫面是某公司的訂單輸入畫面,您會發現它包含了相當多不同類型的資料,例如客戶的資料(包含送貨地址…)、公司內的業務人員、要訂購的產品、數量與金額…等。

  5. ADO.NET資料庫程式設計 資料庫觀念 我們可以將複雜的單據,化作單純的表格形式(我們稱之為資料表),將同一類的資料儲存在一起方便管理。 例如,底下是幾個不同的資料表(分別是客戶資料、產品資料、以及訂單資料):

  6. ADO.NET資料庫程式設計 因此,一筆資料錄當中,有多個欄位,每個欄位就可以儲存不同的資料,有點類似Excel的sheet,讓使用者可以輕鬆的將資料儲存到資料庫中。資料存入資料庫之後,我們就可以針對特定的欄位排序或是以特定的條件搜尋。 資料庫觀念 一個資料表當中,會有許多的記錄: 例如,我們可以透過簡單的指令碼找出上圖這個『訂貨主檔』資料表當中,客戶名稱為『東遠銀行』的所有訂單資料,並且可以依照訂購的日期先後順序來排序顯示出來。 資料錄具有多的欄位,我們稱之為資料欄(Data Column) 每一筆這樣的記錄我們稱為資料錄(Data Row)

  7. ADO.NET資料庫程式設計 資料庫觀念 資料庫不僅可以支援單一條件單一資料表的搜尋,還可以讓資料表之間交叉比對,例如:找出『公司地址在台北市』且『今年訂單總運費超過5000元』的客戶名單。(這些客戶可能我們要換一家更便宜的市區快遞公司來送貨) 我們還可以將兩三個不同的資料表加以關聯,利用多重條件找出符合的資料:

  8. ADO.NET資料庫程式設計 資料庫對VB.NET開發人員的意義 我們可以透過資料庫現有的這些功能,幫助我們設計的資訊系統來存取資料。資料庫本身均包含搜尋、排序、以及管理功能,絕大部分的資料庫也支援標準的SQL語言,讓開發人員或是使用者可以透過簡單的SQL語法來操作資料庫中的資料,對資料進行搜尋、新增、修改、刪除等功能。 因此,Visual Basic 2005的開發人員,在撰寫資料庫應用程式前,可以在資料庫中先建立資料表,待資料表建立完成之後,再透過程式來新增或是編輯資料。在程式運作的過程當中,資料的儲存和搜尋,都是透過資料庫來完成的,而Visual Basic 2005所開發的程式,則負責提供使用者操作介面,讓程式的使用者可以在畫面上輸入資料,進行資料的驗證,最後透過程式碼將資料儲存到資料庫中。

  9. ADO.NET資料庫程式設計 資料庫對VB.NET開發人員的意義 畫面上的使用者介面您應該相當熟悉,多半是TextBox與Label,再加上一個ToolStrip(工具列)就完成了。但是程式的核心絕對不只是畫面上的操作方式,例如搜尋、上下筆的切換、或是修改儲存等等,重點是如何把使用者輸入的資料儲存到資料庫中,以及如何讀取出來。

  10. ADO.NET資料庫程式設計 資料庫對VB.NET開發人員的意義 當我們利用VS2005建立出上頁的輸入畫面,並且透過程式碼讓使用者輸入的資料存入資料庫之後,您可以檢視資料庫中的內容,將會呈現出下面這樣的樣式:

  11. ADO.NET資料庫程式設計 基本SQL語法 我們前面提到過,絕大部分的資料庫都支援SQL語法,可支援資料庫的新增、修改、刪除與搜尋功能。同樣的,我們剛才建立的SQL Server 2005 Express資料庫也是,我們先看資料的搜尋部份。 Select語法 資料的搜尋可以使用Select語法,這個命令會傳回資料表當中符合條件的記錄,符合條件的記錄可能不只有一筆,而是多筆資料,我們稱這些搜尋出來的結果(一筆或多筆資料)為檢視表(view)。 範例:

  12. ADO.NET資料庫程式設計 Select語法 得到的資料如下圖,作者撰寫了一個『SQL語法測試程式(CH08-01)』,您可以在TextBox當中輸入Select語法,按下『執行』鈕之後,即可將資料顯示在下方的DataGridView中: 上面的Select命令,所搜尋出符合條件的資料會回傳到VB程式碼中,成為一個View,填入DataGridView控制項中。

  13. ADO.NET資料庫程式設計 Select語法 Select語法也支援排序功能,您只須要在Select語法的後面加上Order By [欄位名稱],即可針對搜尋到的資料排序: 其中的『*』代表所有的欄位(在您需要取得資料表中所有欄位時,可以省去輸入欄位名稱),執行的結果如上圖。

  14. ADO.NET資料庫程式設計 Select語法 Order By後面若有多個欄位,可以『,』分隔,您可以在欄位後面接上Asc或Desc,指定該欄位的排序方式是由小到大(Asc)還是由大到小(Desc),當您省略時,以Asc為預設值。 您也可以同時以多個欄位來排序,例如上面這樣的SQL語法,可以取得先以『城市』欄位由大到小排序,當『城市』欄位相同時,再以『公司名稱』由小到大排序的資料

  15. ADO.NET資料庫程式設計 Select語法 除了Order By之外,Select最重要的功能是資料的過濾篩選,您可以透過Where關鍵字來決定讀取資料時哪些要顯示出來。

  16. ADO.NET資料庫程式設計 Select語法 除了『欄位名稱=’值’』之外,您還可以透過Like關鍵字,搜尋局部相同的資料,例如: 由於前面提過Like的意思是,字串中只需要部分相同,而不需全部相同,即被視為符合,因此『連絡人 like '陳%'』這個條件,代表連絡人名稱開頭的一個字只要是『陳』,都會被篩選出來。而『%』符號的意思是,代表不確定數量的任何文字,因此只要連絡人欄位的開頭是『陳』的資料,都符合過濾的條件。

  17. ADO.NET資料庫程式設計 Insert語法 除了搜尋之外,另一個很重要的功能,就是資料的新增,資料新增語法結構如下: 例如: 請注意,在SQL語法當中,所有的字串是以單引號『’』所包圍的文字。例如: 這些以單引號『’』所包圍的文字,都是字串。

  18. ADO.NET資料庫程式設計 Delete語法 Delete語法的功能為刪除記錄,您可以刪除特定一筆資料,或是刪除任何符合條件的資料,其語法如下: 同樣的Where後面也可比照Select命令一樣,透過And, Or, 或是Like等關鍵字,組出適當的刪除條件,凡是符合條件的資料都會被刪除,例如: 上面這樣的指令,會刪除所有在城市欄位中資料為『台北市』的客戶資料。請注意,如果您直接輸入: 而忽略where子句,資料庫將會不問條件,一律將『客戶』資料表中所有的資料刪除。

  19. ADO.NET資料庫程式設計 Update語法 Update語法則可用來更新資料庫中的資料,其語法如下: 和Delete敘述一樣,如果您忽略Where子句,系統會不問條件的一律將該資料表中所有的記錄都加以修改(修改的欄位與內容值依照Set子句決定)。 在程式中我們有兩種更新資料的場合, 其中一種是『修正資料』, 另一種是『計算出某種結果』。

  20. ADO.NET資料庫程式設計 Update語法 存放數字的欄位’ 此為Boolean欄位,只有Yes或No兩種可能(分別以1或0)來表示 將會把『所有的產品』設為不再銷售。(但一般我們不常這麼做,除非公司準備結束營業…)

  21. ADO.NET資料庫程式設計 Update語法 存放數字的欄位’ 此為Boolean欄位,只有Yes或No兩種可能(分別以1或0)來表示 上面這段指令,將會把所有庫存量小於5的資料設為不再銷售。這類的更新處理我們稱之為『資料修正』。

  22. ADO.NET資料庫程式設計 Update語法 存放數字的欄位’ 此為Boolean欄位,只有Yes或No兩種可能(分別以1或0)來表示 上面這段指令將所有單價小於10的產品,通通調漲價格,增加一成的售價。這種更新即是為了計算出某種結果。

  23. ADO.NET資料庫程式設計 如何透過VB程式碼存取資料庫 執行左方SQL Command DataGridView 執行左方的Select SQL Command並將回傳值(Data View)填入下方的DataGridView當中。 CH08-03專案

  24. ADO.NET資料庫程式設計 透過DbAccess類別存取資料庫 在這裡指定要存取的SQL Server 2005 Express資料庫。 執行TextBox中的Select命令,傳回的資料會填入DataTable中

  25. ADO.NET資料庫程式設計 透過DbAccess類別將資料寫回資料庫 這邊填入要執行的SQL指令

  26. ADO.NET資料庫程式設計 透過DbAccess類別和ADO.NET來處理資料 我們撰寫了DbAccess類別來幫我們完成資料庫存取的功能,您可以透過這個DbAccess類別完成絕大部分的資料庫存取需求,而存取資料庫的核心程式碼其實位於DbAccess類別當中。 我們會在後面再介紹DbAccess類別中的程式碼。 前面我們已經明白如何透過DbAccess類別將資料庫中的資料讀取出來,而回傳的資料結構就是DataTable,接著我們要來看,如何透過DataTable來處理資料,例如將資料顯示到畫面上供使用者編輯或瀏覽。 在.NET Framework當中,對資料庫的處理是透過ADO.NET架構,ADO.NET是一組專門負責資料庫存取與運作的類別,它可以讓開發人員以一致的方式存取資料來源。不用因為需要存取不同的資料來源(資料庫),就針對不同的資料來源撰寫個別的程式碼。 而前面我們介紹過的DataTable,就是ADO.NET所提供的一個類別。

  27. ADO.NET資料庫程式設計 DataTable與DataRow類別

  28. ADO.NET資料庫程式設計 將畫面上的資料寫回資料庫 cNorthWind.MDF ShowData(ByVal id As Integer) 將第N筆資料顯示在畫面上

  29. ADO.NET資料庫程式設計

  30. ADO.NET資料庫程式設計 將資料庫中讀取到的資料填入畫面 cNorthWind.MDF ToolStrip_btn_Save.Click

  31. ADO.NET資料庫程式設計

  32. ADO.NET資料庫程式設計

  33. ADO.NET資料庫程式設計 將畫面上目前這筆資料刪除 cNorthWind.MDF ToolStrip_btn_Delete_Click

  34. ADO.NET資料庫程式設計 刪除的功能比較容易處理,只需要抓取到頁面上目前顯示的資料錄編號,然後透過底下的SQL語法將其刪除即可

  35. ADO.NET資料庫程式設計 新增一筆資料 新增的功能對於表單上的使用者介面來說,只是清空畫面,提供一個使用者可以輸入的空間而已。 但是請注意,我們在使用者按下新增鈕時,除了要清空畫面之外,還要透過Insert指令,在資料庫中新增了一筆空白的記錄。 並且把該筆記錄帶出到畫面上…

  36. ADO.NET資料庫程式設計

  37. ADO.NET資料庫程式設計 搜尋功能 搜尋的部分我們額外建立了另一張表單,使用者可以在這個表單上輸入搜尋條件,然後按下搜尋鈕。 當使用者按下搜尋鈕之後,該表單會直接開啟資料庫進行搜尋動作,如果找到符合的資料,就呼叫主頁面上的ShowData函式並傳入記錄編號,將指定的記錄顯示出來。

  38. ADO.NET資料庫程式設計 搜尋功能 cNorthWind.MDF btn_search_Click (Search.vb)

  39. ADO.NET資料庫程式設計

  40. ADO.NET資料庫程式設計

  41. ADO.NET資料庫程式設計 如何將照片儲存到資料庫中

  42. 將照片儲存到資料庫 ADO.NET資料庫程式設計 getByte函式:傳入image屬性(也就是圖片本身) ,會回傳一個Byte()陣列(將其存入資料庫),內容是剛才傳入的image物件的檔案實體。

  43. 將資料庫 中的照片顯示出來 ADO.NET資料庫程式設計

  44. ADO.NET資料庫程式設計 DbAccess類別 前面說過,我們撰寫了DbAccess類別來幫我們完成資料庫存取的功能,您可以透過這個DbAccess類別完成絕大部分的資料庫存取需求,而存取資料庫的核心程式碼其實位於DbAccess類別當中。

  45. ADO.NET資料庫程式設計 ADO.NET中的資料庫運作模式

  46. ADO.NET資料庫程式設計 ADO.NET中如何對資料庫執行異動(新增、修改、刪除)

  47. ADO.NET資料庫程式設計 ADO.NET中如何對資料庫建立連線 Data Source指定了資料庫的類型,在這邊我們使用的是SQL Express資料庫,而資料庫的位置由AttachDbFilename項目來決定。 Integrated Security=true;意思是指資料庫的使用權限是透過系統管理,在執行程式時,會依照目前使用者的系統帳號來嘗試開啟資料庫。 ADO.NET要與資料庫連線,必須透過連線字串,在連線字串中可以決定資料庫的類型、帳號密碼、連線方式…等資訊。

  48. SqlDataAdapter可以針對指定的資料連線(conn)執行特定的SQL指令,並以Fill指令,將回傳的結果(DataView)填入dtSqlDataAdapter可以針對指定的資料連線(conn)執行特定的SQL指令,並以Fill指令,將回傳的結果(DataView)填入dt ADO.NET資料庫程式設計 透過DataAdapter來讀取資料 透過SqlDataAdapter物件的Fill方法來執行SQL命令(請注意我們有傳入『conn』這個剛才在建立好的資料庫連線物件),並且取得資料;如此一來,我們就可以取得需要的資料,再透過對DataTable的操作來完成程式當中需要的功能。

  49. 當我們要對資料庫做寫入的動作時,則透過DataCommand這個物件。我們在DbAccess類別當中,建立了ExecuteCmd這個Method來處理。當我們要對資料庫做寫入的動作時,則透過DataCommand這個物件。我們在DbAccess類別當中,建立了ExecuteCmd這個Method來處理。 ADO.NET資料庫程式設計 透過DataCommand來執行SQL命令 您會發現這個ExecuteCmd是一個多載的方法

  50. ADO.NET資料庫程式設計 8-5-3 透過DataCommand來執行SQL命令 主要的功能在程式6-21行,我們透過建立SqlCommand物件,傳入SQL命令和剛才建立好存放在Private變數中的連結物件Conn,並且視需要(若SQL命令中有『@...』這樣的參數)將傳入的parameter值加入第8行建立的SqlCommand(dc)物件當中,最後再透過SqlCommand物件的ExecuteNonQuery方法來執行這段SQL指令。

More Related