第 11 章 Visual BasicSQL Server開(kāi)發(fā)與編程_第1頁(yè)
第 11 章 Visual BasicSQL Server開(kāi)發(fā)與編程_第2頁(yè)
第 11 章 Visual BasicSQL Server開(kāi)發(fā)與編程_第3頁(yè)
第 11 章 Visual BasicSQL Server開(kāi)發(fā)與編程_第4頁(yè)
第 11 章 Visual BasicSQL Server開(kāi)發(fā)與編程_第5頁(yè)
已閱讀5頁(yè),還剩143頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第11章C/S數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)——VisualBasic/ADO+SQLServerODBC概述12.1OLEDB和ADO概述12.2使用ADO數(shù)據(jù)控件訪問(wèn)SQLServer數(shù)據(jù)庫(kù)12.3使用ADO對(duì)象訪問(wèn)SQLServer數(shù)據(jù)庫(kù)12.4SQLServer作為一種網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理系統(tǒng),它在C/S或B/S雙層結(jié)構(gòu)中位于服務(wù)器端,用于存儲(chǔ)數(shù)據(jù)、提供數(shù)據(jù)和管理數(shù)據(jù),構(gòu)成整個(gè)應(yīng)用系統(tǒng)的后端數(shù)據(jù)庫(kù)引擎,能夠滿(mǎn)足客戶(hù)端連接數(shù)據(jù)庫(kù)和存取數(shù)據(jù)的需要。

在C/S結(jié)構(gòu)中,圖形用戶(hù)界面的設(shè)計(jì)工作通常使用VisualBasic、Delphi以及C++、Builder等可視化的前端開(kāi)發(fā)工具來(lái)完成,在B/S結(jié)構(gòu)中往往使用動(dòng)態(tài)服務(wù)器頁(yè)面(ASP)來(lái)實(shí)現(xiàn)。12.1ODBC概述12.1.1ODBC體系結(jié)構(gòu)

ODBC是OpenDatabaseConnectivity的縮寫(xiě),稱(chēng)為開(kāi)放數(shù)據(jù)庫(kù)系統(tǒng)互連,是微軟公司開(kāi)發(fā)和定義的一套數(shù)據(jù)庫(kù)訪問(wèn)標(biāo)準(zhǔn),目前已經(jīng)廣泛地應(yīng)用在數(shù)據(jù)庫(kù)的程序設(shè)計(jì)和開(kāi)發(fā)中。它提供了一種編程接口,可以使用一個(gè)ODBC應(yīng)用程序訪問(wèn)多種數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)庫(kù)。

為了在應(yīng)用程序?qū)?shù)據(jù)庫(kù)進(jìn)行操作,ODBC提供了許多API函數(shù),可以直接使用這些函數(shù)訪問(wèn)數(shù)據(jù)庫(kù),而數(shù)據(jù)庫(kù)的底層操作由各個(gè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序來(lái)完成。ODBC體系結(jié)構(gòu)由應(yīng)用程序、驅(qū)動(dòng)程序管理器、驅(qū)動(dòng)程序和數(shù)據(jù)源4部分組成。ODBC應(yīng)用程序應(yīng)用程序執(zhí)行處理并調(diào)用ODBC函數(shù)。其主要任務(wù)是:連接數(shù)據(jù)源、提交SQL語(yǔ)句、檢索結(jié)果并處理錯(cuò)誤、提交或者回滾SQL語(yǔ)句的事務(wù)以及斷開(kāi)連接的數(shù)據(jù)源。驅(qū)動(dòng)程序管理器

ODBC驅(qū)動(dòng)程序管理器是一個(gè)驅(qū)動(dòng)程序庫(kù),負(fù)責(zé)應(yīng)用程序和驅(qū)動(dòng)程序間的通信。驅(qū)動(dòng)程序

ODBC應(yīng)用程序不能直接存取數(shù)據(jù)庫(kù),其操作請(qǐng)求需要由驅(qū)動(dòng)程序管理器提交給ODBC驅(qū)動(dòng)程序。數(shù)據(jù)源數(shù)據(jù)源(DataSourceName,DSN)是連接數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序與數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的橋梁,它為ODBC驅(qū)動(dòng)程序指定數(shù)據(jù)庫(kù)服務(wù)器名稱(chēng)、登錄名稱(chēng)和密碼等參數(shù)。數(shù)據(jù)源分為文件數(shù)據(jù)源、系統(tǒng)數(shù)據(jù)源和用戶(hù)數(shù)據(jù)源3類(lèi)最常用的是系統(tǒng)數(shù)據(jù)源??梢允褂肙DBC管理器程序來(lái)創(chuàng)建數(shù)據(jù)源。12.1.2配置ODBC數(shù)據(jù)源

使用ODBC編程之前,除了安裝ODBC驅(qū)動(dòng)程序外,還需要配置ODBC數(shù)據(jù)源。(1)在控制面板中,雙擊“管理工具”,然后執(zhí)行“數(shù)據(jù)源(ODBC)”命令,打開(kāi)“ODBC數(shù)據(jù)源管理器”對(duì)話框,如圖12-2所示。該窗口用來(lái)設(shè)置ODBC數(shù)據(jù)源及其驅(qū)動(dòng)程序等。圖12-2“ODBC數(shù)據(jù)源管理器”對(duì)話框用戶(hù)DSN:顯示當(dāng)前登錄用戶(hù)使用的數(shù)據(jù)源清單。系統(tǒng)DSN:顯示可以由系統(tǒng)中全部用戶(hù)使用的系統(tǒng)數(shù)據(jù)源清單。文件DSN:顯示允許連接到一個(gè)文件提供程序的數(shù)據(jù)源清單。驅(qū)動(dòng)程序:顯示所有已經(jīng)安裝的驅(qū)動(dòng)程序。跟蹤:允許跟蹤某個(gè)給定ODBC驅(qū)動(dòng)程序的所有活動(dòng),并記錄到日志文件。連接池:用來(lái)設(shè)置連接ODBC驅(qū)動(dòng)程序的等待時(shí)間。關(guān)于:顯示由ODBC數(shù)據(jù)源管理器使用的動(dòng)態(tài)連接庫(kù)及其版本。(2)在“系統(tǒng)DSN”選項(xiàng)卡中,單擊“添加”按鈕,打開(kāi)“創(chuàng)建新數(shù)據(jù)源”對(duì)話框,在“名稱(chēng)”列表框中選擇“SQLServer”,如圖12-3所示。圖12-3“創(chuàng)建新數(shù)據(jù)源”對(duì)話框(3)單擊“完成”按鈕,打開(kāi)“建立新的數(shù)據(jù)源到SQLServer”對(duì)話框,如圖12-4所示。在“名稱(chēng)”文本框中輸入新數(shù)據(jù)源的名稱(chēng),在“說(shuō)明”文本框中輸入對(duì)數(shù)據(jù)源的說(shuō)明,然后在“服務(wù)器”下拉列表框中選擇要連接到的服務(wù)器。圖12-4“建立新的數(shù)據(jù)源到SQLServer”對(duì)話框(4)單擊“下一步”按鈕,系統(tǒng)提示選擇驗(yàn)證模式,如圖12-5所示。圖12-5選擇驗(yàn)證模式(5)單擊“下一步”按鈕,系統(tǒng)提示用戶(hù)設(shè)置默認(rèn)數(shù)據(jù)庫(kù)等選項(xiàng),如圖12-6所示。圖12-6設(shè)置默認(rèn)數(shù)據(jù)庫(kù)

其中幾個(gè)復(fù)選框的含義如下:“為準(zhǔn)備好的SQL語(yǔ)句創(chuàng)建臨時(shí)存儲(chǔ)過(guò)程,并放下該存儲(chǔ)過(guò)程”:該復(fù)選框允許使用SQLPrepare函數(shù)時(shí),創(chuàng)建一個(gè)臨時(shí)存儲(chǔ)過(guò)程,該選項(xiàng)只能用于SQLServer6.5數(shù)據(jù)庫(kù)。

“使用ANSI引用的標(biāo)識(shí)符”:數(shù)據(jù)庫(kù)源與SQLServer服務(wù)器連接時(shí),將打開(kāi)QUOTED_IDENTIFIRBS選項(xiàng)。“使用ANSI的空值、填充及警告”:選擇該復(fù)選框,數(shù)據(jù)源與SQLServer服務(wù)器連接時(shí),將打開(kāi)ANSI_NULLS、ANSI_WARNINGS和ANSI_PADDINGS選項(xiàng)。

“如果主SQLServer無(wú)效,請(qǐng)使用備用SQLServer”:該選項(xiàng)允許備份SQLServer系統(tǒng),以防主SQLServer系統(tǒng)失敗。(6)保持默認(rèn)設(shè)置,單擊“下一步”按鈕,系統(tǒng)提示用戶(hù)設(shè)置驅(qū)動(dòng)程序使用的語(yǔ)言、字符集區(qū)域和日志文件等,如圖12-7所示。(7)單擊“完成”按鈕,出現(xiàn)“ODBCMicrosoftSQLServer安裝”對(duì)話框,如圖12-8所示。圖12-7設(shè)置驅(qū)動(dòng)程序使用的語(yǔ)言、字符集圖12-8“ODBCMicrosoftSQLServer安裝”對(duì)話框(8)單擊“測(cè)試數(shù)據(jù)源”按鈕,打開(kāi)“SQLServerODBC數(shù)據(jù)源測(cè)試”對(duì)話框,其中顯示了SQLServer的驅(qū)動(dòng)程序版本號(hào),并顯示測(cè)試是否成功的消息。單擊“確定”按鈕,即可返回到“ODBCMicrosoftSQLServer安裝”對(duì)話框。(9)單擊“確定”按鈕,即可創(chuàng)建一個(gè)新的數(shù)據(jù)源。注意:如果更改了數(shù)據(jù)源的配置,可在“ODBC數(shù)據(jù)源管理器”窗口中單擊“配置”按鈕重新對(duì)數(shù)據(jù)源進(jìn)行配置。12.2OLEDB和ADO概述OLEDB是微軟開(kāi)發(fā)的數(shù)據(jù)訪問(wèn)系統(tǒng)級(jí)編程接口,它也提供了對(duì)關(guān)系型數(shù)據(jù)庫(kù)的訪問(wèn),并對(duì)ODBC進(jìn)行了擴(kuò)展。OLEDB主要用作所有數(shù)據(jù)庫(kù)類(lèi)型的標(biāo)準(zhǔn)界面。除了關(guān)系型數(shù)據(jù)庫(kù)外,OLEDB還提供了對(duì)各種各樣數(shù)據(jù)源的訪問(wèn)。ADO(ActiveXDataObjects)并不是訪問(wèn)數(shù)據(jù)的底層解決方案。OLEDB是使用ADO的基礎(chǔ),可以直接使用OLEDB進(jìn)行數(shù)據(jù)庫(kù)程序的開(kāi)發(fā),但是,使用ADO進(jìn)行開(kāi)發(fā)的速度要快得多。12.2.1OLEDB體系結(jié)構(gòu)

微軟定義了OLEDB用戶(hù)的4個(gè)主要類(lèi)型。數(shù)據(jù)提供者使用OLEDBSDK(軟件開(kāi)發(fā)工具箱)創(chuàng)建OLEDB提供者的人。提供者用戶(hù)與數(shù)據(jù)庫(kù)和事件交互作用,發(fā)信號(hào)通知特殊事件的發(fā)生。數(shù)據(jù)消費(fèi)者訪問(wèn)數(shù)據(jù)庫(kù)中信息的應(yīng)用程序、系統(tǒng)驅(qū)動(dòng)程序或用戶(hù)。數(shù)據(jù)服務(wù)提供者創(chuàng)建用以增強(qiáng)用戶(hù)或者數(shù)據(jù)庫(kù)管理員使用或者管理數(shù)據(jù)庫(kù)能力的獨(dú)立應(yīng)用程序(服務(wù))的開(kāi)發(fā)者。例如,查詢(xún)分析器就是一個(gè)數(shù)據(jù)服務(wù)提供者。部件開(kāi)發(fā)者創(chuàng)建應(yīng)用程序模塊或部件,以減少創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用程序所需的編碼工作。OLEDB消費(fèi)者通過(guò)OLEDB用戶(hù)界面和OLEDB提供者來(lái)訪問(wèn)數(shù)據(jù)源,它們之間的關(guān)系如圖12-9所示。圖12-9OLEDB消費(fèi)者和

提供者之間的關(guān)系

對(duì)于不同的OLEDB提供者,OLEDB提供不同級(jí)別的功能,但是它們都支持一個(gè)通用的用戶(hù)界面。和ODBC類(lèi)似,不同的OLEDB數(shù)據(jù)源使用自己的OLEDB提供者,如圖12-10所示。圖12-10應(yīng)用程序通過(guò)ADO調(diào)用OLEDB的模型ODBC是OLEDB為每個(gè)數(shù)據(jù)源使用不同的OLEDB提供者這一規(guī)則的例外。為了保證與已有的ODBC數(shù)據(jù)源最大的兼容性,Microsoft開(kāi)發(fā)了MSDASQL,這是ODBC的OLEDB提供者。

大多數(shù)的OLEDB提供者提供了直接的數(shù)據(jù)庫(kù)訪問(wèn)功能,而ODBC的MSDASQLOLEDB提供者使用已有的ODBC驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)。ODBC的MSDASQLOLEDB提供者將OLEDB調(diào)用映射為等價(jià)的ODBC調(diào)用。

不要認(rèn)為OLEDB和ODBC是兩種完全分離、可以互相替換的技術(shù)。ODBC的OLEDB提供者允許通過(guò)OLEDB或ADO調(diào)用ODBC提供的所有功能。換言之,這兩種技術(shù)是互補(bǔ)的,不能完全互相替換。

OLEDB的整體作用是,拓寬可以用VisualC++應(yīng)用程序訪問(wèn)的數(shù)據(jù)庫(kù)類(lèi)型的范圍。12.2.2ADO對(duì)象模型ADO是一個(gè)OLEDB的消費(fèi)者,它提供了對(duì)數(shù)據(jù)源的應(yīng)用程序訪問(wèn)。另外,ADO是一個(gè)OLE自動(dòng)服務(wù)器,大多數(shù)兼容OLE的開(kāi)發(fā)和腳本環(huán)境可以調(diào)用它。

使用ADO,可以編寫(xiě)通過(guò)OLEDB提供者對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行訪問(wèn)和操作的應(yīng)用程序。其優(yōu)點(diǎn)就是易于使用,性能好,占用內(nèi)存和磁盤(pán)空間少,并且支持基于客戶(hù)機(jī)/服務(wù)器的Web數(shù)據(jù)庫(kù)應(yīng)用程序。

ADO的對(duì)象模型為層次結(jié)構(gòu),如圖12-11所示。圖12-11ADO對(duì)象層次模型

在ADO對(duì)象模型中,Connection、Recordset和Command對(duì)象是三個(gè)主要的對(duì)象。Connection對(duì)象表示對(duì)遠(yuǎn)程數(shù)據(jù)源的連接,可與Recordset對(duì)象或者Command對(duì)象關(guān)聯(lián)。

Command對(duì)象主要擔(dān)任數(shù)據(jù)庫(kù)查詢(xún)的角色,一般來(lái)說(shuō)該查詢(xún)請(qǐng)求是通過(guò)SQL語(yǔ)句來(lái)描述。

在所有ADO對(duì)象中,Recordset對(duì)象功能最強(qiáng)大,由數(shù)據(jù)庫(kù)服務(wù)器取得的數(shù)據(jù)集合就存儲(chǔ)在Recordset對(duì)象中。然后再利用程序設(shè)計(jì)語(yǔ)言來(lái)處理該Recordset對(duì)象中的記錄。另外,ADO允許在程序執(zhí)行期間建立不同的ADO對(duì)象的關(guān)聯(lián)。

由于OLEDB提供者所支持的功有不同,ADO對(duì)象的某些性能、方法或者集合可能無(wú)效。12.2.3使用ADO的簡(jiǎn)單流程ADO的目標(biāo)是訪問(wèn)、編輯和更新數(shù)據(jù)源,使用ADO編程的簡(jiǎn)單流程如下:(1)連接到數(shù)據(jù)源。同時(shí),可確定對(duì)數(shù)據(jù)庫(kù)源的所有更改是否已成功或沒(méi)有發(fā)生。(2)指定訪問(wèn)數(shù)據(jù)源的命令,同時(shí)可帶變量參數(shù)或優(yōu)化執(zhí)行。(3)執(zhí)行命令。(4)如果這個(gè)命令使數(shù)據(jù)按表中的行的形式返回,則將這些行存儲(chǔ)在易于檢查、操作或更改的緩存中。(5)適當(dāng)情況下,可使用緩存行的更改內(nèi)容來(lái)更新數(shù)據(jù)源。(6)提供常規(guī)方法檢測(cè)錯(cuò)誤(通常由建立連接或執(zhí)行命令造成)。(7)關(guān)閉連接到的數(shù)據(jù)源。12.3使用ADO數(shù)據(jù)控件訪問(wèn)SQLServer數(shù)據(jù)庫(kù)

在VisualBasic6.0中,ADO數(shù)據(jù)控件使用MicrosoftActiveXDataObjects(ADO)快速地建立數(shù)據(jù)綁定控件和數(shù)據(jù)提供者之間的連接,數(shù)據(jù)綁定控件是任何具有DataSource屬性的控件,數(shù)據(jù)提供者可以是任何符合OLEDB規(guī)范的數(shù)據(jù)源。

使用ADO數(shù)據(jù)控件訪問(wèn)SQLServer數(shù)據(jù)庫(kù)時(shí),通常需要做以下幾件事情:(1)在VisualBasic工程中添加一個(gè)ADO數(shù)據(jù)控件;(2)使用ADO數(shù)據(jù)控件連接到一個(gè)SQLServer數(shù)據(jù)庫(kù);(3)將ADO數(shù)據(jù)控件連接到一個(gè)或多個(gè)數(shù)據(jù)綁定控件。12.3.1在VisualBasic工程中添加ADO數(shù)據(jù)控件

使用ADO數(shù)據(jù)控件建立與一個(gè)SQLServer數(shù)據(jù)庫(kù)的連接之前,必須首先把該控件添加到工具箱中。(1)啟動(dòng)VisualBasic集成開(kāi)發(fā)環(huán)境,并建立一個(gè)標(biāo)準(zhǔn)EXE工程。(2)從“工程”菜單中選擇“部件”命令(快捷鍵為Ctrl+T),或者右擊工具箱,從彈出式菜單中選擇“部件”命令。(3)在“部件”對(duì)話框中選擇“控件”選項(xiàng)卡,在可用的ActiveX控件列表中選中“MicrosoftADODataControl6.0(OLEDB)”復(fù)選框。(4)單擊“確定”按鈕,將ADO數(shù)據(jù)控件添加到工具箱中。12.3.2使用ADO數(shù)據(jù)控件連接SQLServer數(shù)據(jù)庫(kù)

一旦將ADO數(shù)據(jù)控件添加到工具箱后,就可以在窗體上添加一個(gè)ADO數(shù)據(jù)控件,在工具箱中單擊Adodc,然后在窗體上沿斜向拖動(dòng)鼠標(biāo)。1.調(diào)整ADO數(shù)據(jù)控件的大小和位置

將ADO數(shù)據(jù)控件放在窗體的底部,使其寬度等于窗體的ScaleWidth屬性值,并且自動(dòng)改變大小以適合窗體的寬度。2.建立與SQLServer數(shù)據(jù)庫(kù)的連接

若要使用ADO數(shù)據(jù)控件建立應(yīng)用程序與一個(gè)SQLServer數(shù)據(jù)庫(kù)的連接,就必須將該控件的ConnectionString屬性設(shè)置為一個(gè)有效的連接字符串,這可以通過(guò)該控件的“屬性頁(yè)”對(duì)話框來(lái)完成。(1)選擇ADO數(shù)據(jù)控件Adodc1,右擊數(shù)據(jù)控件Adodc1,選擇ADODC屬性,打開(kāi)屬性頁(yè)對(duì)話框,或在ADO數(shù)據(jù)控件Adodc1的屬性中單擊ConnectionString屬性行中的對(duì)話按鈕,打開(kāi)“屬性頁(yè)”對(duì)話框。如圖12-15所示。圖12-15“屬性頁(yè)”對(duì)話框(2)在“屬性頁(yè)”對(duì)話框中,單擊“通用”選項(xiàng)卡,選擇“使用連接字符串”單選鈕,并在下面的文本框中填入連接字符串,然后單擊“確定”按鈕,結(jié)束ConnectionString屬性的設(shè)置過(guò)程。(3)在“數(shù)據(jù)鏈接屬性”對(duì)話框中,從列表中選擇“MicrosoftOLEDBProviderforSQLServer”作為OLEDB提供程序,然后單擊“下一步”按鈕。如圖12-16所示。圖12-16選擇OLEDB提供程序注意:當(dāng)使用ADO數(shù)據(jù)控件建立應(yīng)用程序與SQLServer數(shù)據(jù)庫(kù)的連接時(shí),也可選擇“MicrosoftOLEDBProviderforODBCDrivers”作為OLEDB提供程序。(4)單擊“數(shù)據(jù)鏈接屬性”對(duì)話框的“連接”選項(xiàng)卡之后,如圖12-17所示。執(zhí)行以下操作:選擇或輸入想要連接的SQLServer服務(wù)器名稱(chēng);選擇“使用指定的用戶(hù)名稱(chēng)和密碼”選項(xiàng),輸入用戶(hù)名稱(chēng)和密碼,并選中“允許保存密碼”復(fù)選框(如果不選此復(fù)選框,在運(yùn)行時(shí)將出現(xiàn)一個(gè)“登錄”對(duì)話框);選擇“在服務(wù)器上選擇數(shù)據(jù)庫(kù)”選項(xiàng),從下拉式列表中選擇要訪問(wèn)的SQLServer數(shù)據(jù)庫(kù)(在本例中選擇了Student數(shù)據(jù)庫(kù))。圖12-17設(shè)置數(shù)據(jù)鏈接信息(5)如果希望檢驗(yàn)所設(shè)置的連接信息的有效性,請(qǐng)單擊“測(cè)試連接”按鈕。當(dāng)看到“測(cè)試連接成功”字樣時(shí),請(qǐng)單擊“確定”按鈕。(6)返回“屬性頁(yè)”對(duì)話框之后,可以看到一個(gè)比較長(zhǎng)的字符串,這就是剛才生成的連接字符串,如圖12-18所示。單擊“確定”按鈕,結(jié)束ConnectionString屬性的設(shè)置過(guò)程。圖12-18生成的連接字符串3.設(shè)置想要訪問(wèn)的記錄源

通過(guò)設(shè)置ADO控件的ConnectionString屬性,連接到指定服務(wù)器上的數(shù)據(jù)源之后,還必須指定具體的記錄源,這可通過(guò)設(shè)置ADO數(shù)據(jù)控件的RecordSource屬性來(lái)實(shí)現(xiàn)。(1)在圖12-15所示的“屬性頁(yè)”對(duì)話框中,單擊“記錄源”選項(xiàng)卡?;蜻x擇ADO數(shù)據(jù)控件adodc1,在“屬性”窗口中,單擊RecordSource屬性行中的對(duì)話按鈕,在打開(kāi)的“屬性頁(yè)”對(duì)話框中,選擇“記錄源”選項(xiàng)卡。如圖12-19所示。圖12-19選擇命令類(lèi)型(2)從“命令類(lèi)型”下拉式列表中選擇下列選項(xiàng)之一:選擇1-adCmdText,表示要向服務(wù)器發(fā)送Transact-SQL語(yǔ)句;選擇2-adCmdTable,表示要從服務(wù)器上的一個(gè)數(shù)據(jù)庫(kù)表中查詢(xún)數(shù)據(jù);選擇4-adCmdStoredProc,表示要執(zhí)行服務(wù)器上的一個(gè)存儲(chǔ)過(guò)程。注意:在“屬性”窗口中直接設(shè)置ADO數(shù)據(jù)控件的CommandType屬性值,也可達(dá)到上述相同的目的。(3)根據(jù)選擇命令類(lèi)型的不同,執(zhí)行下列操作之一:如果選擇的命令類(lèi)型是1,請(qǐng)直接在“命令文本(SQL)”文本框中輸入要向服務(wù)器發(fā)送的Transact-SQL語(yǔ)句;如果選擇的命令類(lèi)型是2或4,請(qǐng)?jiān)凇氨砘虼鎯?chǔ)過(guò)程名稱(chēng)”下拉式列表中選擇一個(gè)數(shù)據(jù)庫(kù)表、視圖或存儲(chǔ)過(guò)程名稱(chēng)。本例中選擇了一個(gè)數(shù)據(jù)庫(kù)表,其名稱(chēng)為“student_Info”表。如圖12-20所示。圖12-20選擇命令表或存儲(chǔ)過(guò)程(4)單擊“確定”按鈕,關(guān)閉“屬性頁(yè)”對(duì)話框。

ADO數(shù)據(jù)控件本身并不能檢索和更新數(shù)據(jù),若要實(shí)現(xiàn)數(shù)據(jù)的檢索和更新,還必須將ADO數(shù)據(jù)控件連接到一個(gè)或多個(gè)數(shù)據(jù)綁定控件上。12.3.3ADO數(shù)據(jù)控件在程序中的操作方法1.在程序中確定數(shù)據(jù)表使用Adodc的屬性頁(yè)設(shè)置數(shù)據(jù)表時(shí)只能為一個(gè)數(shù)據(jù)控件設(shè)置一個(gè)數(shù)據(jù)表,如果要使用數(shù)據(jù)控件操作多個(gè)數(shù)據(jù)表需要在程序中確定數(shù)據(jù)表。

在程序中設(shè)置Adodc的數(shù)據(jù)表的方法如下:(1)確定連接字符串Adodcl.ConnectionString="Provider=SQLOLEDB.1;Password=sa;PersistSecurityInfo=True;UserID=sa;InitialCatalog=Student;DataSource=ZCJ"(2)確定命令類(lèi)型Adodcl.CommandType=adCmdTable(3)確定數(shù)據(jù)庫(kù)表Adodcl.RecordSource="表名“(4)刷新AdodcAdodcl.Refresh2.Adodc中的記錄屬性(1)AbsolutePosition屬性在Adodc中有一個(gè)用于反映當(dāng)前記錄指針的位置屬性值A(chǔ)bsolutePosition。AbsolutePosition屬性所反映出來(lái)的記錄指針的當(dāng)前位置值就是當(dāng)前記錄指針的真實(shí)位置。當(dāng)前記錄指針指向的記錄號(hào)就是AbsolutePosition的返回值。

另外,VisualBasic還為AbsolutePosition設(shè)置了3個(gè)預(yù)設(shè)值,adPosBOF、adPosEOF和adPosUnknown。如果AbsolutePosition的返回值為adPosBOF則說(shuō)明記錄指針已經(jīng)位于文件頭,adPosEOF用于說(shuō)明記錄指針已經(jīng)位于文件尾,adPosUnknown用于說(shuō)明位置未知,很少使用。AbsolutePosifion屬性的具體用法如下:Adodcl.Recordset.AbsolutePosition=adPosBOF'記錄指針為首記錄時(shí)的操作Adodcl.Recordset.AbsolutePosition=adPosEOF'記錄指針為尾記錄時(shí)的操作(2)RecordCount屬性

RedordCount屬性用來(lái)測(cè)量數(shù)據(jù)庫(kù)表的記錄總數(shù)。其值為:Adodcl.Recordset.RecordCount3.Adodc對(duì)數(shù)據(jù)表的操作方法(1)Addnew方法Adodcl.Recordset.AddNew。(2)Update方法在新記錄輸入完畢后,使用Update方法或記錄指針發(fā)生移動(dòng)時(shí)新輸入的記錄才能從緩沖區(qū)存入數(shù)據(jù)庫(kù)。Adodcl.Recordset.Update(3)Delete方法刪除數(shù)據(jù)可使用Delete方法,其格式為:Adodcl.Recordset.Delete。4.記錄定位方法(1)向前移動(dòng)一條記錄Adodcl.Recordset..MoveNext(2)向后移動(dòng)一條記錄Adodcl.Recordset.MovePrevious(3)移動(dòng)到首記錄Adodcl.Recordset.MoveFirst(4)移動(dòng)到尾記錄Adodcl.Recordset.MoveLast(5)記錄指針的相對(duì)移動(dòng)Adodcl.Recordset.Move±n12.3.4數(shù)據(jù)綁定控件的使用

數(shù)據(jù)綁定控件,就是任何具有DataSource屬性的控件。使用數(shù)據(jù)綁定控件顯示或更新SQLServer數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),必須進(jìn)行以下設(shè)置:①將數(shù)據(jù)綁定控件的DataSource屬性設(shè)置為一個(gè)ADO數(shù)據(jù)控件名稱(chēng);②將數(shù)據(jù)綁定控件的DataField屬性設(shè)置為結(jié)果集之中的一個(gè)字段名稱(chēng)。1.使用Label和TextBox控件按行顯示單個(gè)記錄Label和TextBox控件通過(guò)ADO數(shù)據(jù)控件綁定到數(shù)據(jù)庫(kù)之后,都可用于顯示當(dāng)前記錄的一個(gè)字段值。所不同的是,Label控件中的數(shù)據(jù)是只讀的,TextBox控件中的數(shù)據(jù)是可修改的。2.使用DataList或DataCombo控件顯示一個(gè)字段的多個(gè)值

若要顯示一個(gè)字段在多行記錄中的取值,可以使用DataList和DataCombo控件來(lái)完成。若要使用一個(gè)數(shù)據(jù)源中的一個(gè)字段填充DataList控件或DataCombo控件時(shí),應(yīng)當(dāng)在設(shè)計(jì)時(shí)或運(yùn)行時(shí)設(shè)置以下兩個(gè)屬性:①將DataList控件或DataCombo控件的RowSource屬性設(shè)置為ADO控件名稱(chēng);②將DataList控件或DataCombo控件的ListField屬性設(shè)置為結(jié)果集之中的一個(gè)字段名稱(chēng)。3.使用DataGrid控件顯示一個(gè)結(jié)果集的記錄DataGrid控件是一種類(lèi)似于表格的控件,它用于顯示并允許對(duì)一個(gè)結(jié)果集之中的一系列行和列進(jìn)行操作。4.ADO數(shù)據(jù)控件和數(shù)據(jù)綁定控件的綜合使用

在程序設(shè)計(jì)中,對(duì)數(shù)據(jù)表文件進(jìn)行數(shù)據(jù)錄入、修改、查詢(xún)、刪除以及記錄的定位操作時(shí),人們更習(xí)慣在程序工作界面里使用“按鈕”來(lái)操作。12.4使用ADO對(duì)象訪問(wèn)SQLServer數(shù)據(jù)庫(kù)VisualBasic6.0提供了ActiveX數(shù)據(jù)對(duì)象(ADO)、遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)和數(shù)據(jù)訪問(wèn)對(duì)象(DAO)三種數(shù)據(jù)訪問(wèn)接口。其中最新的是ADO對(duì)象模型,它比RDO和DAO更為簡(jiǎn)單、更為靈活。

開(kāi)發(fā)新的數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),ADO是首選的數(shù)據(jù)訪問(wèn)接口。ADO對(duì)象模型中包含三個(gè)主要對(duì)象,即Connection對(duì)象、Recordset對(duì)象和Command對(duì)象。12.4.1引用ADO對(duì)象庫(kù)

在程序中聲明各種ADO對(duì)象之前,必須首先在工程中引用對(duì)象庫(kù)MicrosoftAxtiveXDataObjectsLibrary。

在工程中引用ADO對(duì)象庫(kù),步驟如下。(1)啟動(dòng)VisualBasic集成開(kāi)發(fā)環(huán)境,然后選擇“工程→引用”命令,打開(kāi)引用對(duì)話框。(2)在“可用的引用”列表中,單擊MicrosoftActiveXDataObiects2.6Library(或2.5、2.0、2.1Library)項(xiàng)目左邊的復(fù)選框,如圖12-25所示。圖12-25“引用”對(duì)話框(3)單擊“確定”按鈕,關(guān)閉對(duì)話框。12.4.2使用Connection對(duì)象Connection對(duì)象用于建立應(yīng)用程序與數(shù)據(jù)庫(kù)之間的連接。使用ADO對(duì)象訪問(wèn)數(shù)據(jù)庫(kù)時(shí),通常需要使用Connection對(duì)象建立與數(shù)據(jù)庫(kù)的一個(gè)連接,以此作為執(zhí)行命令和查詢(xún)的基礎(chǔ)。1.建立Connection對(duì)象

建立Connection對(duì)象,有兩種方法:①在程序中建立一個(gè)Connection對(duì)象時(shí),首先需要定義一個(gè)Connection類(lèi)型的對(duì)象變量,然后建立該對(duì)象的一個(gè)實(shí)例。相應(yīng)的語(yǔ)句為:DimcnAsADODB.ConnectionSetcn=NewADODB.connection②若在聲明對(duì)象變量的Dim語(yǔ)句中使用了New關(guān)鍵字,則在第一次引用這個(gè)對(duì)象變量時(shí)將建立該對(duì)象的一個(gè)實(shí)例,此時(shí)不必使用Set語(yǔ)句對(duì)該對(duì)象變量進(jìn)行賦值,則上面的兩個(gè)語(yǔ)句就可以合并成一個(gè)語(yǔ)句,即:DimcnASNewADODB.Connection2.使用Connection對(duì)象創(chuàng)建程序與SQLServer的連接

使用Connection對(duì)象的Open方法,用于創(chuàng)建應(yīng)用程序與數(shù)據(jù)源之間的連接。

Open方法的語(yǔ)法格式如下:connection.OpenConnectionString,UserID,Password

使用Open方法與SQLServer數(shù)據(jù)庫(kù)建立連接,通常有以下兩種方法:①通過(guò)連接ODBC數(shù)據(jù)源的方法。DimCnASNewADODB.ConnectionDimcn_strASStringcn_str="PROVIDER=MSDASQL;DSN=stu_data;UID=Sa;PWD=sa"'stu_data為數(shù)據(jù)源名Cn.Opencn_str②通過(guò)OLEDB連接字符串連接。DimcnASNewADODB.ConnectionDimcn_strASStringcn_str="DRIVER=SQLServer;SERVER=ZCJ;UID=sa;PWD=sa;DATABASE=student"'student為數(shù)據(jù)庫(kù)名Cn.Opencn_str3.使用Connection對(duì)象處理數(shù)據(jù)

使用Connection對(duì)象的Open方法,建立到數(shù)據(jù)庫(kù)的物理連接,然后可以使用該對(duì)象的Execute方法生成新的數(shù)據(jù)集,也可以使用該對(duì)象的Execute方法在數(shù)據(jù)庫(kù)表中執(zhí)行檢索、插入、修改和刪除數(shù)據(jù)等命令。(1)生成記錄集

Execute方法的語(yǔ)法格式為:Setrecordset=connection.Execute(CommandText)(2)執(zhí)行插入、修改和刪除數(shù)據(jù)等命令

Execute方法的語(yǔ)法格式為:connection.ExecuteCommandText4.關(guān)閉連接

使用Connection對(duì)象的Close方法可以關(guān)閉與數(shù)據(jù)源的連接,以下代碼關(guān)閉了cn對(duì)象與數(shù)據(jù)源的連接,并將這個(gè)對(duì)象變量從內(nèi)存中釋放。Cn.closeCn=nothing12.4.3使用Recordset對(duì)象處理數(shù)據(jù)Recordset對(duì)象有比較多的屬性和方法,使用ADO編程時(shí),通過(guò)Recordset對(duì)象幾乎可以對(duì)所有數(shù)據(jù)進(jìn)行操作。1.創(chuàng)建Recordset對(duì)象

創(chuàng)建Recordset對(duì)象常用的方法有以下幾種。(1)通過(guò)Connection對(duì)象創(chuàng)建Recordset對(duì)象(2)通過(guò)Command對(duì)象創(chuàng)建Recordset對(duì)象(3)通過(guò)Recordset對(duì)象的Open方法創(chuàng)建Recordset對(duì)象

通過(guò)執(zhí)行Recordset對(duì)象的Open方法,可從數(shù)據(jù)庫(kù)中檢索所需要的記錄。在調(diào)用Recordset對(duì)象的Open方法時(shí),需要提供兩個(gè)方面的信息:一方面通過(guò)一個(gè)打開(kāi)的Connection對(duì)象提供數(shù)據(jù)庫(kù)連接信息,另一方面通過(guò)表名或SQL查詢(xún)語(yǔ)句提供數(shù)據(jù)源的詳細(xì)信息。①語(yǔ)法格式:recordset.OpendataSource,ActiveConnection,CursorType,LockType②說(shuō)明:其中的參數(shù)均為可選項(xiàng),Source可以是Command對(duì)象的變量名、SQL語(yǔ)句、表名或存儲(chǔ)過(guò)程等。ActiveConnection為有效的Connection對(duì)象變量名或一個(gè)連接字符串。CursorType用于確定提供者打開(kāi)Recordset時(shí)應(yīng)該使用的游標(biāo)類(lèi)型。LockType用于確定提供者打開(kāi)Recordset時(shí)應(yīng)該使用的鎖定(并發(fā))類(lèi)型。2.刷新與關(guān)閉Recordset對(duì)象(1)刷新Recordset對(duì)象rs.Refresh(2)關(guān)閉Recordset對(duì)象rs.Close或通過(guò)設(shè)置Recordset對(duì)象為空,可將對(duì)象變量從內(nèi)存中完全刪除,達(dá)到關(guān)閉Recordset對(duì)象。3.Recordset對(duì)象的記錄屬性Recordset對(duì)象的記錄屬性如下。(1)AbsolutePosition屬性設(shè)置或返回當(dāng)前記錄在記錄集中的位置。(2)RecordCount屬性

RecordCount屬性是用來(lái)測(cè)量數(shù)據(jù)庫(kù)表的記錄總數(shù)。(3)Bookmark屬性

Bookmark屬性用于返回或設(shè)置當(dāng)前記錄集指針的書(shū)簽,其數(shù)據(jù)類(lèi)型為String,在程序中可以用Bookmark屬性對(duì)記錄指針進(jìn)行重新定位。(4)BOF屬性如果當(dāng)前記錄在第一條記錄之前,則該屬性值為true。(5)EOF屬性如果當(dāng)前記錄在最后一條記錄之后,則該屬性值為true。4.通過(guò)Recordset對(duì)象對(duì)數(shù)據(jù)表的操作方法(1)Addnew方法rs.Addnew。(2)Update方法

在新記錄輸入完畢后,使用Update方法或記錄指針發(fā)生移動(dòng)時(shí),新輸入的記錄才能從緩沖區(qū)存入數(shù)據(jù)庫(kù)。rs.Update(3)Delete方法rs.Delete5.記錄定位方法

打開(kāi)一個(gè)非空記錄集時(shí),當(dāng)前記錄總是定位在第一條記錄上。使用Recordset對(duì)象的一些方法和屬性可在不同記錄之間移動(dòng)。(1)向前移動(dòng)一條記錄rs.MoveNext(2)向后移動(dòng)一條記錄rs.MovePrevious(3)移動(dòng)到首記錄rs.MoveFirst(4)移動(dòng)到尾記錄rs.MoveLast(5)記錄指針的相對(duì)移動(dòng)rs.Move±n6.Recordset對(duì)象Fileds集合(1)訪問(wèn)字段值每個(gè)Recordset對(duì)象都包含一個(gè)Fileds集合。該集合由一些Fields對(duì)象組成,F(xiàn)ields對(duì)象的數(shù)目由Fields集合的Count屬性確定。每個(gè)Fields對(duì)象對(duì)應(yīng)于記錄集內(nèi)的一個(gè)字段。(2)求字段總數(shù)rs.Fields.Count7.設(shè)置游標(biāo)類(lèi)型

在使用Recordset對(duì)象的Open方法時(shí),可以通過(guò)Cursortype參數(shù)來(lái)確定提供者打開(kāi)Recordset時(shí)應(yīng)該使用的游標(biāo)類(lèi)型(記錄集的讀寫(xiě)屬性)。在ADO中定義了以下4種不同的游標(biāo)類(lèi)型。(1)僅向前游標(biāo)(AdOpenForward)這是一種缺省的游標(biāo)類(lèi)型,記錄集的讀寫(xiě)屬性為“只讀”,除在記錄中向前滾動(dòng)之外它提供最快的運(yùn)行性能。(2)靜態(tài)游標(biāo)(AdOpenStatic)記錄集的讀寫(xiě)屬性為“只讀”,允許Recordset中各種類(lèi)型的移動(dòng),即當(dāng)前記錄可前后移動(dòng)。其他用戶(hù)所做的添加、更改或刪除將不可見(jiàn)。(3)鍵集游標(biāo)(AdOpenKeyset)記錄集的讀寫(xiě)屬性為“讀寫(xiě)”,其行為類(lèi)似動(dòng)態(tài)游標(biāo),不同的是AdOpenKeyset將無(wú)法查看到其他用戶(hù)對(duì)數(shù)據(jù)的更改。允許Recordset中各種類(lèi)型的移動(dòng),即當(dāng)前記錄可前后移動(dòng)。(4)動(dòng)態(tài)游標(biāo)(AdOpenDynamic)記錄集的讀寫(xiě)屬性為“讀寫(xiě)”,可用于查看其他用戶(hù)所做的添加、更改和刪除,并用于不依賴(lài)書(shū)簽的Recordset中各種類(lèi)型的移動(dòng)。在提供者支持的情況下,可以使用書(shū)簽。8.設(shè)置鎖定類(lèi)型

如果幾個(gè)用戶(hù)同時(shí)對(duì)數(shù)據(jù)庫(kù)表中的一個(gè)記錄進(jìn)行修改,就有可能出現(xiàn)沖突,解決沖突的方法是設(shè)置記錄集的鎖定類(lèi)型。在使用ADO對(duì)象操作時(shí),如果不作對(duì)記錄可否修改的說(shuō)明,則不允許對(duì)記錄進(jìn)行修改。

在Recordset的Open方法中,第4個(gè)參數(shù)是LockType,它用于設(shè)置編輯過(guò)程中對(duì)記錄使用的鎖定類(lèi)型。在ADO中定義了以下4種鎖定類(lèi)型。(1)只讀(adLockReadOnly)這是一種缺省的鎖定類(lèi)型,禁止修改記錄,為只讀鎖。(2)保守式記錄鎖定(逐條)(adLockPessimistic)通常采用編輯時(shí)立即鎖定數(shù)據(jù)源的記錄方式,直到執(zhí)行Update方法或移動(dòng)記錄時(shí)為止。(3)開(kāi)放式記錄鎖定(逐條)(adLockOptimistic)提供者使用開(kāi)放式鎖定,只在調(diào)用Update方法或移動(dòng)記錄時(shí)鎖定記錄,直到操作完成為止。(4)開(kāi)放式批更新(adLockBatchOptimistic)

可以同時(shí)更新多個(gè)記錄。若要指定打開(kāi)記錄集時(shí)提供者應(yīng)該使用的鎖定類(lèi)型,請(qǐng)?jiān)诖蜷_(kāi)Recordset之前設(shè)置LockType屬性,也可以在調(diào)用Open方法時(shí)設(shè)置LockType。Recordset關(guān)閉時(shí),LockType屬性為讀/寫(xiě),打開(kāi)時(shí)該屬性為只讀。

如果通過(guò)執(zhí)行SQL語(yǔ)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論