《ADO數(shù)據(jù)庫技術(shù)及應(yīng)用.ppt》由會員分享,可在線閱讀,更多相關(guān)《ADO數(shù)據(jù)庫技術(shù)及應(yīng)用.ppt(27頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、一、ADO數(shù)據(jù)庫技術(shù)概述,1、ADO概述 ActiveX Data Objects (ADO) 是微軟最新的數(shù)據(jù)訪問技術(shù)。它被設(shè)計(jì)用來同新的數(shù)據(jù)訪問層OLE DB Provider一起協(xié)同工作,以提供通用數(shù)據(jù)訪問(Universal Data Access)。OLE DB是一個(gè)低層的數(shù)據(jù)訪問接口,用它可以訪問各種數(shù)據(jù)源,包括傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,以及電子郵件系統(tǒng)及自定義的商業(yè)對象。,第六章 ADO數(shù)據(jù)庫技術(shù)及應(yīng)用,,ADO向我們提供了一個(gè)熟悉的,高層的對OLE DB的Automation封裝接口。 對那些熟悉RDO的程序員來說,你可以把OLE DB比作是ODBC驅(qū)動程序。如同RDO對象是ODBC
2、驅(qū)動程序接口一樣,ADO對象是OLE DB的接口;如同不同的數(shù)據(jù)庫系統(tǒng)需要它們自己的ODBC驅(qū)動程序一樣,不同的數(shù)據(jù)源要求它們自己的OLE DB提供者(OLE DB provider)。 目前,雖然OLE DB提供者比較少,但微軟正積極推廣該技術(shù),并打算用OLE DB取代ODBC。,2、基本的 ADO 編程模型,ADO 提供執(zhí)行以下操作的方式: 連接到數(shù)據(jù)源。同時(shí),可確定對數(shù)據(jù)源的所有更改是否已成功或沒有發(fā)生。 指定訪問數(shù)據(jù)源的命令,同時(shí)可帶變量參數(shù),或優(yōu)化執(zhí)行。 執(zhí)行命令。 如果這個(gè)命令使數(shù)據(jù)按表中的行的形式返回,則將這些行存儲在易于檢查、操作或更改的緩存中。 適當(dāng)情況下,可使用緩存行的更改
3、內(nèi)容來更新數(shù)據(jù)源。 提供常規(guī)方法檢測錯(cuò)誤(通常由建立連接或執(zhí)行命令造成)。,3、ADO 對象模型,每個(gè) Connection、Command、Recordset 和 Field 對象都有 Properties 集合。,4、ADO 編程模型詳細(xì)資料,以下元素是 ADO 編程模型中的關(guān)鍵部分: 連接:通過“連接”可從應(yīng)用程序訪問數(shù)據(jù)源,連接是交換數(shù)據(jù)所必需的環(huán)境。通過如 Microsoft Internet Information Server 作為媒介,應(yīng)用程序可直接(有時(shí)稱為雙層系統(tǒng))或間接(有時(shí)稱為三層系統(tǒng))訪問數(shù)據(jù)源。對象模型使用 Connection 對象使連接概念得以具體化。 命令:通
4、過已建立的連接發(fā)出的“命令”可以某種方式來操作數(shù)據(jù)源。一般情況下,命令可以在數(shù)據(jù)源中添加、刪除或更新數(shù)據(jù),或者在表中以行的格式檢索數(shù)據(jù)。對象模型用 Command 對象來體現(xiàn)命令概念。Command 對象使 ADO 能夠優(yōu)化對命令的執(zhí)行。,,參數(shù):通常,命令需要的變量部分即“參數(shù)”可以在命令發(fā)布之前進(jìn)行更改。例如,可重復(fù)發(fā)出相同的數(shù)據(jù)檢索命令,但每一次均可更改指定的檢索信息。參數(shù)對執(zhí)行其行為類似函數(shù)的命令非常有用,這樣就可知道命令是做什么的,但不必知道它如何工作。 對象模型用 Parameter 對象來體現(xiàn)參數(shù)概念。,,記錄集: 如果命令是在表中按信息行返回?cái)?shù)據(jù)的查詢(行返回查詢),則這些行將
5、會存儲在本地。 對象模型將該存儲體現(xiàn)為 Recordset 對象。但是,不存在僅代表單獨(dú)一個(gè) Recordset 行的對象。 記錄集是在行中檢查和修改數(shù)據(jù)最主要的方法。Recordset 對象用于: 指定可以檢查的行。 移動行。 指定移動行的順序。 添加、更改或刪除行。 通過更改行更新數(shù)據(jù)源。 管理 Recordset 的總體狀態(tài)。,,字段:一個(gè)記錄集行包含一個(gè)或多個(gè)“字段”。如果將記錄集看作二維網(wǎng)格,字段將排列構(gòu)成“列”。每一字段(列)都分別包含有名稱、數(shù)據(jù)類型和值的屬性,正是在該值中包含了來自數(shù)據(jù)源的真實(shí)數(shù)據(jù)。對象模型以 Field 對象體現(xiàn)字段。 錯(cuò)誤 屬性 集合 事件,5、使用對象的
6、ADO 編程模型,ADO 的目標(biāo)是訪問、編輯和更新數(shù)據(jù)源,而編程模型體現(xiàn)了為完成該目標(biāo)所必需的系列動作的順序。ADO 提供類和對象以完成以下活動: 連接到數(shù)據(jù)源 (Connection),并可選擇開始一個(gè)事務(wù)。 可選擇創(chuàng)建對象來表示 SQL 命令 (Command)。 可選擇在 SQL 命令中指定列、表和值作為變量參數(shù) (Parameter)。 執(zhí)行命令 (Command、Connection 或 Recordset)。 如果命令按行返回,則將行存儲在緩存中 (Recordset)。 可選擇創(chuàng)建緩存視圖,以便能對數(shù)據(jù)進(jìn)行排序、篩選和定位 (Recordset)。 通過添加、刪除或更改行和列編輯
7、數(shù)據(jù) (Recordset)。 在適當(dāng)情況下,使用緩存中的更改內(nèi)容來更新數(shù)據(jù)源 (Recordset)。 如果使用了事務(wù),則可以接受或拒絕在完成事務(wù)期間所作的更改。結(jié)束事務(wù) (Connection)。,6、Connection 對象,Connection 對象代表打開的、與數(shù)據(jù)源的連接 使用 Connection 對象的集合、方法、和屬性可執(zhí)行下列操作: 在打開連接前使用 ConnectionString、ConnectionTimeout 和 Mode 屬性對連接進(jìn)行配置。 設(shè)置 CursorLocation 屬性以便調(diào)用支持批更新的“客戶端游標(biāo)提供者”。 使用 DefaultDatabas
8、e 屬性設(shè)置連接的默認(rèn)數(shù)據(jù)庫。 使用 Provider 屬性指定 OLE DB 提供者。 使用 Open 方法建立到數(shù)據(jù)源的物理連接。使用 Close 方法將其斷開。 使用 Execute 方法執(zhí)行對連接的命令,并使用 CommandTimeout 屬性對執(zhí)行進(jìn)行配置。 使用 Errors 集合檢查數(shù)據(jù)源返回的錯(cuò)誤。 通過 Version 屬性讀取使用中的 ADO 執(zhí)行版本。 使用 OpenSchema 方法獲取數(shù)據(jù)庫模式信息。,,ADO的Connection對象的幾種連接數(shù)據(jù)庫的方法和形式: 靜態(tài)ODBC數(shù)據(jù)源DSN連接式 動態(tài)ODBC數(shù)據(jù)驅(qū)動連接式 OLEDB數(shù)據(jù)提供者連接方式 舉例說明:
9、,7、Recordset 對象,Recordset 對象表示的是來自基本表或命令執(zhí)行結(jié)果的記錄全集。任何時(shí)候,Recordset 對象所指的當(dāng)前記錄均為集合內(nèi)的單個(gè)記錄。 可使用 Recordset 對象操作來自提供者的數(shù)據(jù)。使用 ADO 時(shí),通過 Recordset 對象可對幾乎所有數(shù)據(jù)進(jìn)行操作。所有 Recordset 對象均使用記錄(行)和字段(列)進(jìn)行構(gòu)造。由于提供者所支持的功能不同,某些 Recordset 方法或?qū)傩杂锌赡軣o效。 Recordset主要操作功能如下(舉例說明),通過舉例說明以下功能:,打開 Recordset 時(shí),當(dāng)前記錄位于第一個(gè)記錄(如果有),并且 BOF 和
10、EOF 屬性被設(shè)置為 False。如果沒有記錄,BOF 和 EOF 屬性設(shè)置是 True。 假設(shè)提供者支持相關(guān)的功能,可以使用 MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法以及 Move 方法,和 AbsolutePosition、AbsolutePage 和 Filter 屬性來重新確定當(dāng)前記錄的位置。僅向前 Recordset 對象只支持 MoveNext 方法。當(dāng)使用 Move 方法訪問每個(gè)記錄(或枚舉 Recordset)時(shí),可使用 BOF 和 EOF 屬性查看是否移動已經(jīng)超過了 Recordset 的開始或結(jié)尾。,,Recordset 對
11、象可支持兩類更新:立即更新和批更新。使用立即更新,一旦調(diào)用 Update 方法,對數(shù)據(jù)的所有更改將被立即寫入基本數(shù)據(jù)源。也可以使用 AddNew 和 Update 方法將值的數(shù)組作為參數(shù)傳遞,同時(shí)更新記錄的若干字段。 如果提供者支持批更新,可以使提供者將多個(gè)記錄的更改存入緩存,然后使用 UpdateBatch 方法在單個(gè)調(diào)用中將它們傳送給數(shù)據(jù)庫。這種情況應(yīng)用于使用 AddNew、Update 和 Delete 方法所做的更改。調(diào)用 UpdateBatch 方法后,可以使用 Status 屬性檢查任何數(shù)據(jù)沖突并加以解決。,8、Command 對象 (ADO),Command對象的主要目的是執(zhí)行參
12、數(shù)化的存儲過程。其形式要么是臨時(shí)準(zhǔn)備(prepared),要么是持久的預(yù)編譯(precompiled)過的SQL語句。如果想(存儲)一個(gè)或多個(gè)查詢以供在同一Connection上多次執(zhí)行,Command對象也是很有用的。 當(dāng)想創(chuàng)建Recordset時(shí),一種高效的方法是繞過Command對象而采用Recordset.Open方法。,二、ADO應(yīng)用技術(shù),1、ADO數(shù)據(jù)庫連接方式主要有以下三種: 靜態(tài)ODBC數(shù)據(jù)源DSN連接式 舉例: cnnData.Open DSN=Data_Nwind;UID=;PWD=; 動態(tài)ODBC數(shù)據(jù)驅(qū)動連接式 舉例: cnnData.Open Driver=Micros
13、oft Access Driver _(*.mdb); DBQ= Persist Security Info=False,,ADO創(chuàng)建數(shù)據(jù)庫連接思路,定義全局?jǐn)?shù)據(jù)庫連接變量,自動生成連接參數(shù)ConnectionString,通過Conn.Open調(diào)用連接參數(shù),開啟建立數(shù)據(jù)庫連接通道成功,,,,2、如何添加一條記錄,1)思路,建立數(shù)據(jù)庫連接,添加數(shù)據(jù)準(zhǔn)備工作,數(shù)據(jù)校驗(yàn),打開要添加記錄的數(shù)據(jù)表,添加更新數(shù)據(jù)-AddNew-Update,,,,,將變量值賦給字段,,,2)具體實(shí)現(xiàn)程序 cnLink.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
14、Persist Security Info=False Set rstLink = New ADODB.Recordset rstLink.Open select * from 課程信息表, cnLink, 3, 3 rstLink.AddNew For i = 1 To 5 If Text1(i) Then rstLink(i).Value = Text1(i) Next rstLink.Update rstLink.Close,2、顯示記錄,1)思路 建立數(shù)據(jù)庫連接 通過查詢條件寫SQL查詢語句 通過rst對象打開相應(yīng)的表,并執(zhí)行查詢找出符合查詢條件的記錄 將記錄集結(jié)果返
15、回到界面的變量中 查詢結(jié)束,返回查詢結(jié)果,,2)具體實(shí)現(xiàn) Set cnLink = New ADODB.Connection cnLink.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Persist Security Info=False Set rstLink = New ADODB.Recordset rstLink.Open “select * from 課程信息表 where 課程名稱=數(shù)值分析, cnLink, 3, 3 For i = 1 To 5 Text1(i).Text = If rstLink(i)
16、Then Text1(i).Text = rstLink(i).Value Next rstLink.close,3、如何移動瀏覽記錄,1)思路 建立數(shù)據(jù)庫連接 通過查詢條件寫SQL查詢語句 通過rst對象打開相應(yīng)的表,并執(zhí)行查詢找出符合查詢條件的記錄 通過四個(gè)按鈕執(zhí)行rst的 MoveFirst、MoveLast、MoveNext 以及 MovePrevious 方法 通過界面變量返回查詢結(jié)果,,2)實(shí)現(xiàn)方法 Public Sub MoveAny(intChoice As Integer, _ rstTemp As Recordset) 使用指定方法捕獲 BOF 和 EOF。 Select
17、 Case intChoice Case 1 rstTemp.MoveFirst Case 2 rstTemp.MoveLast Case 3 rstTemp.MoveNext If rstTemp.EOF Then MsgBox Already at end of recordset! rstTemp.MoveLast End If Case 4 rstTemp.MovePrevious If rstTemp.BOF Then MsgBox Already at beginning of recordset! rstTemp.MoveFirst End If End Select End S
18、ub,4、刪除記錄,1)思路1 建立數(shù)據(jù)庫連接 通過查詢條件寫SQL刪除語句 提出刪除警告 通過rst對象打開相應(yīng)的表,并執(zhí)行刪除命令 思路2 建立數(shù)據(jù)庫連接 通過conn.Excute(SQL)直接執(zhí)行刪除命令,,2)實(shí)現(xiàn)方法(2種) If vbOK = MsgBox(您真的要刪除這條記錄嗎?, vbOKCancel + vbQuestion, 警告) Then cnnData.Execute delete from 基本信息表 where ID=11 End If,If vbOK = MsgBox(您真的要刪除這條記錄嗎?, vbOKCancel + vbQuestion, 警告) T
19、hen rstData.Open delete from 基本信息表 where ID=11 ,cnnData,3,3 End If,5、修改記錄,建立數(shù)據(jù)庫連接 通過rst對象打開相應(yīng)的表,并執(zhí)行查詢找出符合查詢條件的記錄 在可編輯的界面上顯示數(shù)據(jù)記錄 修改界面變量 通過Update方法更新數(shù)據(jù) 通過界面顯示成功信息,,2)實(shí)現(xiàn)方法 If Text2(0) Then rstData.open select * from 工程碩士成績表 where ID= & CInt(Text2(0)) Else rstData.open select * from 工程碩士成績表 rstData.AddNew End If For i = 1 To Text2.UBound If Trim(Text2(i)) Then rstData(i) = Trim(Text2(i)) Else rstData(i) = Null End If Next rstData.Update MsgBox 保存數(shù)據(jù)成功!, 0 + 64, 提示,