李 靜
提要本文介紹了Visual Basic數(shù)據(jù)庫訪問技術(shù)發(fā)展的歷史,詳細(xì)闡述了利用ADO以非編程方式及編程方式實現(xiàn)數(shù)據(jù)庫訪問的方法。
關(guān)鍵詞:VB;ADO;ADO Data控件;ADO對象模型
中圖分類號:F407.67文獻(xiàn)標(biāo)識碼:A
Visual Basic作為一種面向?qū)ο蟮目梢暬幊坦ぞ?,具有簡單易學(xué)、靈活方便和易于擴(kuò)充的特點,并且支持一套出色的數(shù)據(jù)庫訪問技術(shù)。Microsoft為其提供了與SQL Server通信的API函數(shù)集及工具集,因此它越來越多地用作前臺應(yīng)用程序的開發(fā),與后臺的Microsoft SQL Server相結(jié)合,從而提供一個高性能的客戶機(jī)-服務(wù)器方案。
一、VB數(shù)據(jù)庫訪問技術(shù)的發(fā)展
早期的Visual Basic數(shù)據(jù)訪問工具是簡單的ASCII文件訪問工具,極少數(shù)SQL Server 的前端應(yīng)用程序是數(shù)據(jù)接口VBSQL編寫的。在Visual Basic 3.0時代,許多用戶強(qiáng)調(diào)轉(zhuǎn)移包含遠(yuǎn)程數(shù)據(jù)源的ISAM(Indexed Sequential Access Method,索引順序存取法)數(shù)據(jù),為此Microsoft設(shè)計了Microsoft Jet Database Engine(或簡稱為Jet)和DAO(Data Access Object),使得Visual Basic Access開發(fā)人員很容易地同Jet接口,其操作針對記錄和字段,主要用于開發(fā)單一的數(shù)據(jù)庫應(yīng)用程序。隨著使用者需求的不斷改變,Visual Basic又包含了更快的訪問遠(yuǎn)程數(shù)據(jù)和對ODBC數(shù)據(jù)源訪問的優(yōu)化,出現(xiàn)了新的數(shù)據(jù)庫接口RDO(Remote Data Object),它是訪問關(guān)系型ODBC數(shù)據(jù)源的最佳界面接口,其操作針對行和列。ADO(ActiveX Data Objects)作為另一種可供選擇的技術(shù)出現(xiàn),正在逐漸代替其他數(shù)據(jù)訪問接口。ADO比DAO和RDO具有更好的靈活性,更易使用,實現(xiàn)的功能也更全面。
二、ActiveX數(shù)據(jù)對象ADO
ADO是一種用于開發(fā)訪問OLE DB數(shù)據(jù)源應(yīng)用程序的API,是Visual Basic中新的數(shù)據(jù)訪問標(biāo)準(zhǔn)。ADO提供了更為高級的易于理解的訪問機(jī)制,具有更加簡單、更加靈活的操作性能。ADO訪問數(shù)據(jù)是通過OLE DB來實現(xiàn)的,OLE DB不僅能夠以SQL Server、Oracle、Access等數(shù)據(jù)庫文件為訪問對象,還可對Excel表格、文本文件、圖形文件、電子郵件等各種各樣的數(shù)據(jù)通過統(tǒng)一的接口進(jìn)行存取。ADO集中了DAO和RDO的優(yōu)點,是DAO、RDO的后繼產(chǎn)物而且不像DAO和RDO那樣依賴于對象層次。ADO對象模型定義了一個可編程的分層對象集合,主要由七個對象成員Connection、Command、Recordset、Error、Parameter、Field和Property以及四個集合對象Errors、Parameters、Fields、Properties所組成。每個 Connection、Command、Recordset和Field對象都有Properties集合。
三、ADO數(shù)據(jù)庫訪問技術(shù)的應(yīng)用
在VB中,使用ADO訪問數(shù)據(jù)庫主要有兩種方式,一種是使用ADO Data控件,通過對控件的綁定來訪問數(shù)據(jù)庫中的數(shù)據(jù),即非編程訪問方式;另一種是使用ADO對象模型,通過定義對象和編寫代碼來實現(xiàn)對數(shù)據(jù)的訪問,即編程訪問方式。下面以SQL Server數(shù)據(jù)庫為例,說明這兩種方式的使用。首先在SQL Server 2000中建立一個XJGL的數(shù)據(jù)庫,在XJGL數(shù)據(jù)庫中建立student數(shù)據(jù)表,然后將此數(shù)據(jù)表的信息通過數(shù)據(jù)綁定控件DataGrid顯示出來。
(一)使用ADO Data控件訪問數(shù)據(jù)庫。這是使用ADO快速創(chuàng)建數(shù)據(jù)綁定控件和數(shù)據(jù)提供者之間的連接。其中數(shù)據(jù)綁定控件可以是任何具有DataSource屬性的控件;數(shù)據(jù)提供者可以是任何符合OLE DB規(guī)范的數(shù)據(jù)源。
ADO Data控件是ActiveX控件,在使用前必須先將其添加到工具箱中。方法是:
(1)單擊“工程”—“部件”菜單選項,選中“Microsoft ADO Data Control 6.0(OLE DB)”后,按“確定”,此時ADO數(shù)據(jù)控件便出現(xiàn)在工具箱中。
(2)將ADO Data控件添加到窗體上,其默認(rèn)的名稱屬性為“Adodc1”。
(3)右擊ADO Data控件,選“ADODC屬性”,彈出“屬性頁”對話框。
(4)選中“使用連接字符串”(也可以選擇“ODBC數(shù)據(jù)源名稱”),再單擊“生成”按鈕,彈出“數(shù)據(jù)鏈接屬性”對話框。
(5)選擇“提供程序”選項卡,在列表中選擇“Microsoft OLE DB Provider For SQL SERVER”選項,單擊“下一步”按鈕。
(6)指定服務(wù)器的名稱和登錄信息并選擇本連接要使用的數(shù)據(jù)庫文件。
(7)單擊“測試連接”按鈕以確定連接是否正常。若得到測試成功的消息,單擊“確定”按鈕以繼續(xù)。
(8)在“屬性頁”對話框中選擇“記錄源”選項卡,在命令類型下拉列表中選擇“2-adCmdTable”選項,在表或存儲過程名稱下拉列表中選擇數(shù)據(jù)表“student”。(若選擇的命令類型為“1-adCmdText”,則可在命令文本框中輸入SQL查詢語句),然后單擊“確定”按鈕。
(9)在窗體上再添加一個數(shù)據(jù)綁定控件DataGridl,設(shè)定其DataSource為Adodc1。
通過上述操作便實現(xiàn)了SQL Server數(shù)據(jù)庫XJGL中student表的瀏覽功能,得到預(yù)期的運行結(jié)果。
(二)使用ADO 對象模型訪問數(shù)據(jù)庫。為了能夠在程序中使用ADO對象編程,在連接數(shù)據(jù)庫前,需要在Visual Basic 6.0菜單 “工程”—“引用”中選擇Microsoft ActiveX Data Objects 2.8 Library組件。運用ADO對象模型的主要元素:Connection(連接)中的ConnectionString屬性進(jìn)行連接,ConnectionString為可讀寫string類型,指定一個連接字符串,告訴ADO如何連接數(shù)據(jù)庫。
(1)首先創(chuàng)建一組ADO對象用于設(shè)置打開連接和產(chǎn)生結(jié)果集。聲明語句如下:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
(2)創(chuàng)建ADO對象實例,聲明了對象以后,還需要創(chuàng)建對象實例,否則不能使用。以下是兩條重要語句:
Set cn =New ADODB.Connection
Set rs =New ADODB.Recordset
(3)設(shè)置Connection對象實例ConnectionString屬性連接到數(shù)據(jù)庫。有兩種方法:
方法一:有源數(shù)據(jù)庫連接。首要任務(wù)是要注冊數(shù)據(jù)源名稱(DSN),通過配置ODBC環(huán)境,進(jìn)行數(shù)據(jù)源的注冊,然后才能對數(shù)據(jù)源進(jìn)行連接、訪問和操作。例如,DSN數(shù)據(jù)源是“information”、用戶名是“sa”、口令為空,與數(shù)據(jù)庫“XJGL”建立的連接代碼如下:
cn.ConnectionString="dsn=information;uid=sa;pwd=;database=XJGL"
方法二:無源數(shù)據(jù)庫連接。不需要配置ODBC數(shù)據(jù)源,區(qū)別在于是否使用了DSN來決定。例如,提供連接所需要的特定信息包括:服務(wù)器名稱是“my_server”、用戶名是“sa”、口令為空,與數(shù)據(jù)庫“XJGL”建立的連接代碼如下:
cn.ConnectionString="driver={sql server};server=my_server;uid=sa;pwd=;Database=XJGL"
(4)設(shè)置好連接屬性后,就可以打開連接對象了。語句如下:
cn.Open
這樣,VB和后臺SQL Server數(shù)據(jù)庫的連接就創(chuàng)建好了。
實例:創(chuàng)建示圖界面,并以無源數(shù)據(jù)庫連接的方式完成上例同樣的功能。編寫代碼如下:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
Private Sub Form_Load()
Set cn=New ADODB.Connection
Set rs=New ADODB.Recordset
cn.ConnectionString="driver={sql server};server=my_server;uid=sa;pwd=;Database=XJGL"
cn.Open
cmd.ActiveConnection=cn
cmd.CommandType=adCmdText
cmd.CommandText="select* from student"
rs.CursorLocation=adUseClient
rs.CursorType=adOpenDynamic
rs.LockType=adLockReadOnly
rs.Open cmd
Set DataGrid1.DataSource=rs
End Sub
ADO數(shù)據(jù)控件和ADO對象模型都為我們提供了數(shù)據(jù)庫訪問的接口技術(shù),使用ADO Data控件在建立連接、選擇數(shù)據(jù)表時,不需要創(chuàng)建連接對象和記錄集對象,ADO Data控件幾乎封裝了相應(yīng)代碼的所有功能,只需設(shè)置好與之相關(guān)的屬性、方法和事件,操作簡單,但是ADO Data控件靈活性較差,不利于對大型數(shù)據(jù)庫訪問,一個ADO Data控件只能在同一數(shù)據(jù)源上打開一個記錄集,在一個應(yīng)用中若涉及多個記錄集,則需要建立多個ADO Data控件。使用ADO對象模型,通過定義對象、編寫代碼來實現(xiàn)數(shù)據(jù)庫的訪問,可以很好地控制各種操作,使其具備了更多的靈活性和更強(qiáng)大的功能,便于實現(xiàn)對象重用、封裝等技術(shù),也利于事件處理,提高數(shù)據(jù)操作效率,特別是對海量數(shù)據(jù)的處理。兩種方法各有優(yōu)點,在開發(fā)應(yīng)用程序時,應(yīng)根據(jù)數(shù)據(jù)庫應(yīng)用程序的特點來選擇具體的訪問方式。
(作者單位:西安歐亞學(xué)院)
參考文獻(xiàn):
[1][美]Bob Reselman,Richard Peasley.實用Visual Basic 6教程.清華大學(xué)出版社,2001.3.
[2][美]Ted Coombs,Jon Campbell.Visual Basic編程實用大全.中國水利水電出版社,2002.11.
[3]張宗飛.VB中基于ADO的數(shù)據(jù)庫訪問技術(shù)分析及應(yīng)用.計算機(jī)與數(shù)字工程,2008.
[4]夏慶梅,熊華鋼.VB訪問SQL Server的三種數(shù)據(jù)訪問接口的研究.計算機(jī)應(yīng)用研究,2001.