?? 20.3.2 利用ado對象訪問數據庫.txt
字號:
20.3.2 利用ADO對象訪問數據庫
為了演示在VB環境中添加ADO對象的支持,我們再新建一個VB工程。然后選擇 <Project\References. ..】菜單項,在彈出的如圖 20.28所示的 References對話框中找到 Microsoft ActiveX Data Objects 2.7 Library一項井復選上,從該對話框底部提供的信息可知,我們所選的這個ADO對象是msado15.dll這一動態鏈接庫提供的。
"‘
第20 HOOK相踉揭
IIvalol:曲-,
。K
C.nCeI
"4
叫"-
憤‘'
同σ回畸缸徘咱~DàOl咱!.S2.7Lb.,.
e唱
t皿aticn C:\P睛gr..聞0S\ec...r嗣同腳'istlhi\8:蜘翩翩5."
1M鳴"筒10'去a罵旬rd
. 圈20.28 為VB程序添加ADO對象的支持
單擊【OK】按鈕關閉References對話框。然后選擇【View\ObjectBrowser】菜單項,這時將打開對象瀏覽器窗口 (如圖20.29所示),其中可以看到Command對象、Connection對象,還有Recordset對象。這里需要注意,這些在VB中都是對象,但在VC中都是COM接口。
然后在程序窗體中放置一個列表框 (List1)和一個按鈕控件 CCommandl)。程序窗體設計界面如圖20.30所示。雙擊界面上的按鈕控件,這將跳轉到代碼編輯窗口。下面筆者將分別介紹如何利用ADO的三個核心對象執行SQL語旬,以便訪問數據庫數據的實現方法。
卜lIlIII川 t川M
IADODB 3..!扛
j:1
魚ιj l.Jst1
ot ~C倪育回cUon' ;
BeglnTransCoaplete
Co..an.Tiaeout
, Co..itTransCoaplete
c。陽、ectCoaplete c。陽市ctlonStrlng
Clal. C...ctl_
JJ:!一 | j:
'回ber of ApoDB
圖 20.29Object Browser對話框圖 20.30 VB程序窗體設計界面利用 Connection對象執行SQL語旬首先介紹利用 Connection對象執行SQL語句讀取數據庫數據的方法。這時所編寫的Commandl按鈕單擊事件的代碼如例20-22所示。例20-22
Private Sub Commandl_Click()
D工m conn As New ADODB.Connection
Dl.m rst As ADODB .Recordset
conn .ConnectionString = "Provider=SQLOLEDB.l;Password=sa;Pers工st Security 工nfo=True; User ID=sa;Initial Catalog=pubs "
760 I ....靜'
G川
conn.Open
Set rst = conn.Execute("select * from authors")
Do Until rst.EOF
Listl.AddItem rst("~u_lname")
rst.MoveNext
Loop
End Sub
在如例20-22所示代碼中,首先定義了一個連接對象: conn,然后定義一個記錄集對象: rsto注意,這里在定義連接對象時使用了new操作符,但在定義記錄集對象時并沒有使用 new操作符。如果使用了 new操作符,這與VC中使用 new操作符產生一個對象的作用是一樣的,也就是構造了該對象:如果沒有使用new操作符,那么所定義的對象是沒有經過初始化的,這樣隨后的代碼將不能直接訪問其屬性和方法,必須先對該對象進行賦值之后,才能訪問這些內容。
接著,為連接對象的連接字符串賦值。這個連接字符串就是用來設定訪問數據庫時所使用的OLE DB Provider、數據庫服務器所在機器的名稱、用戶登錄名稱和密碼。而上面使用 ADO控件訪問數據庫的例子中已經創建了這個連接字符串,可以直接復制。有些讀者把這個連接字符串硬記了下來,實際上并沒有這個必要,因為這個連接字符串比較復雜,如果有一段時間沒有編寫程序,可能就會忘記宮的寫法,另外,利用于工書寫這個字符串很容易出錯,所以筆者建議,即使讀者是用VC作開發,也要在機器上安裝上VB的開發環境,這樣需要時可以在VB中利用 ADO控件獲得數據庫連接宇符串,然后直接復制到 VC程序中使用即可。
接下來,如例 20-22所示代碼調用連接對象的 Open函數建立連接。然后,利用連接對象的Execute方法給記錄集對象賦值,該方法將執行一條SQL語句,本例就是簡單地從 authors表中查詢數據。
當執行完SQL語句之后, authors表中所有數據都將以數據集對象的形式提供。為了訪問這些數據,可以用循環語句來實現。只有到達記錄集的末尾(即 rst.EOF為真)時,此循環才結束,否則將不斷地讀取記錄集對象中的數據,本例中是利用記錄集對象通過索引取出 au_lname宇段的數據,并將數據放置到列表框中。這里讀者一定要注意,在取出記錄集數據后,必須調用記錄集對象的MoveNext函數。因為在訪問數據庫中表的數據時,在內部實際上是通過一個游標進行操作的。我們可以把游標看作是一個指針,當這個指針指向某一行,我們就可以取出這一行的數據。如果指針沒有移動,那么在每次循環時取的數據都是同一行的數據,當然這個循環就變成了一個死循環,因為它始終不會到達記錄集的末尾。當調用 MoveNext函數后,這個游標指針將被移動到下一行記錄上,下一次循環時取出的數據就是下一行的數據。這樣,當到達記錄集末尾時, rst.EOF為真,循環終止。我們要記住的是,對數據庫的訪問總是按行進行的。
運行當前的VB程序,并單擊Cornmandl按鈕,這時在列表框中就會顯示出所有的作者姓名信息。程序界面如圖20.31所示。
第 20章 HOOK
A畫畫l
White ... Green Carson O'Leary Straight Smith Bennet Dull Gringtesby Lock sl巴y Greene Blotchet.Halls ."'J
一一---~
I .
cam回回1
圖 20 .3 1在 VB中利用 ADO對象訪問數據庫的程序運行結果
2.利用 Recordset對象執行 SQL語旬
上面是利用 Connection對象執行 SQL語旬,從而得到記錄集對象,也可以直接利用記錄集對象去執行一條 SQL語句。這時就需要使用 new操作符產生一個 Recordset對象,并將該對象的 ActiveConnection屬性設置為當前的連接對象,然后就可以調用該記錄集對象的 Open方法去打開數據庫連接,井執行一條查詢語旬,這時的 Commandl按鈕單擊事件的代碼如例 20-23所示。
鑼IJ 20-23
private Sub Command1_C1ick()
Dim conn As New ADODB .Connection
Dim rst As New ADODB . Recordset
conn. ConnectionString = "Provider=SQLOLEOB.1; Password=sa; Persist Securi ty 工 nfo=True ; User ID=sa ; In工 tial Catalog=pubs " conn. Open
'Set rst = conn.Execute ("select * from authors " )
rst . ActiveConnection = conn
rst .Open "select * from authors "
00 Until rst . EOF
List1.Addltem rst( "au_lname")
rst .MoveNext
Loop
End Sub
3.利用 Command對象執行 SQL語旬
ADO中還有一個核心對象: Command對象,現在就利用此對象來訪問數據,這時, Commandl按鈕單擊事件的代碼如例 20-24所示。
,
762 I脅"口
例 20-24
Private Sub Commandl_Click()
oim conn As New ADODB.Connection
Oim rst As New ADOOB.Recordset
oim crnd As New ADODB.Command
conn. ConnectionString = "Provider=SQLOLEDB. 1; Password=sa; Persist Security 工 nfo=True; User ID=sa;工 nitial Catalog=pubs" conn.Open
.
'Set rst conn.Execute(而 select * frorn authors")
'rst.ActiveConnection = conn
'rst.Open "select * frorn authors"
cmd.ActiveConnection = conn
crnd.CommandText = "select * frorn authors"
Set rst = crnd.Execute
.
00 Until rst.EOF
List1.AddItem rst("au-lname")
rst.MoveNext
Loop
End Sub
從上述例 20-24所示代碼中,我們可以看到,利用 ADO的 Command對象訪問數據庫時,首先需要設置該對象的 ActiveConn即tion屬性,接著設置它的命令文本 (CommandText)屬性,可以將該屬性設置為一條有效的 SQL語句。然后調用 Command對象的 Execute方法執行該 SQL語句,并將結果賦給記錄集對象,也就是將查詢結果放到記錄集對象中。其他代碼同前面的方法一樣。
通過上面內容的介紹,我們可以發現,在 VB中利用 ADO訪問數據庫是非常靈活的。上述幾種用法沒有優劣之分,在實際編程時主要是根據具體的使用情況來選擇-種實現方法,例如如果需要重復地執行一條 SQL語句時,那么最好使用 Command對象來實現。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -