版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)13.1ASP與ADO
13.2建立連接13.3Recordset對(duì)象13.4Command對(duì)象第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)13.1ASP與ADO ASP提供了強(qiáng)大的訪問(wèn)數(shù)據(jù)庫(kù)的功能。用ASP訪問(wèn)數(shù)據(jù)庫(kù)所使用的是ADO(ActiveXDataObjects)組件。 使用ADO編寫(xiě)的ASP程序,不僅能夠訪問(wèn)Access數(shù)據(jù)庫(kù),能夠訪問(wèn)包括Oracle、MSSQLServer、Sybase等支持OLEDB、ODBC的數(shù)據(jù)庫(kù)。 ASP提供了強(qiáng)大的訪問(wèn)數(shù)據(jù)庫(kù)的功能。用ASP訪問(wèn)數(shù)據(jù)庫(kù)所13.1ASP與ADO13.1.1ASP與數(shù)據(jù)庫(kù) 通過(guò)ADO對(duì)象,ASP可以訪問(wèn)Oracle、Sybase、MSSQLServer、Access、FoxPro等各種支持ODBC或OLEDB的數(shù)據(jù)庫(kù)。也就是說(shuō),只要具有某種數(shù)據(jù)庫(kù)的ODBC或OLEDB驅(qū)動(dòng)程序,就可以通過(guò)ADO訪問(wèn)數(shù)據(jù)庫(kù)。ASP、ADO、OLEDB及各種數(shù)據(jù)庫(kù)之間的關(guān)系如圖13-1所示。13.1ASP與ADO13.1.1ASP與數(shù)據(jù)庫(kù)第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)課件13.1.2ADO的概念和結(jié)構(gòu) ODBC(OpenDatabaseConnectivity)是微軟公司開(kāi)發(fā)的一套開(kāi)放數(shù)據(jù)庫(kù)應(yīng)用程序的接口規(guī)范,是廣泛使用的數(shù)據(jù)庫(kù)接口。使用ODBC開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的方法是建立ODBC數(shù)據(jù)源,通過(guò)ODBC接口函數(shù),提交SQL語(yǔ)句并接收?qǐng)?zhí)行SQL命令的結(jié)果。數(shù)據(jù)庫(kù)的底層操作由各個(gè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序完成。13.1.2ADO的概念和結(jié)構(gòu) OLEDB是以ActiveX技術(shù)為基礎(chǔ)的數(shù)據(jù)訪問(wèn)技術(shù)標(biāo)準(zhǔn)。OLEDB基于組件模型;可以訪問(wèn)多種格式的數(shù)據(jù),包括數(shù)據(jù)庫(kù)的數(shù)據(jù)和非數(shù)據(jù)庫(kù)的數(shù)據(jù)。OLEDB標(biāo)準(zhǔn)的具體實(shí)現(xiàn)是一組API函數(shù)。使用OLEDBAPI,可以編寫(xiě)能夠訪問(wèn)符合OLEDB標(biāo)準(zhǔn)的任何數(shù)據(jù)源應(yīng)用程序。 OLEDB是以ActiveX技術(shù)為基礎(chǔ)的數(shù)據(jù)訪問(wèn)技術(shù)標(biāo) 為了使各種流行的編程語(yǔ)言都能編寫(xiě)符合OLEDB標(biāo)準(zhǔn)的應(yīng)用程序,微軟公司在OLEDBAPI之上提供了一種面向?qū)ο蟮?、與語(yǔ)言無(wú)關(guān)的應(yīng)用程序編寫(xiě)接口,就是ADO。 ADO是一項(xiàng)數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。ADO具有如下優(yōu)點(diǎn)。 為了使各種流行的編程語(yǔ)言都能編寫(xiě)符合OLEDB標(biāo)準(zhǔn)的應(yīng) 對(duì)于程序設(shè)計(jì)者而言,ADO很容易掌握和使用。 ADO能夠被VisualBasic、Java、C++、VBScript及Jscript等程序設(shè)計(jì)語(yǔ)言所支持。 ADO能夠訪問(wèn)各種支持OLEDB的數(shù)據(jù)源,也就是說(shuō),通過(guò)ADO能夠訪問(wèn)具有OLEDB驅(qū)動(dòng)程序的數(shù)據(jù)源。 ADO允許C++的程序員訪問(wèn)OLEDB的底層接口。 對(duì)于程序設(shè)計(jì)者而言,ADO很容易掌握和使用。 ADO包括7個(gè)對(duì)象及集合,其主要作用描述如下。(1)Connection對(duì)象 Connection對(duì)象用于建立數(shù)據(jù)源與ADO應(yīng)用程序之間的連接。 ADO包括7個(gè)對(duì)象及集合,其主要作用描述如下。(2)Recordset對(duì)象 Recordset對(duì)象是ADO中最重要的對(duì)象之一,是對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢索后的數(shù)據(jù)記錄集。這個(gè)記錄集既可以是Command對(duì)象返回的查詢結(jié)果,也可以是直接運(yùn)行SQL命令產(chǎn)生的查詢結(jié)果。Recordset對(duì)象把數(shù)據(jù)庫(kù)檢索的結(jié)果封裝在一起,并通過(guò)它的方法和屬性提供一種方便、快捷地訪問(wèn)每條記錄、每個(gè)字段的方法。(2)Recordset對(duì)象(3)Command對(duì)象 Command對(duì)象用于定義數(shù)據(jù)庫(kù)的查詢動(dòng)作,一般使用SQL命令,也可以使用存儲(chǔ)過(guò)程。 Command對(duì)象允許指定參數(shù),其參數(shù)通過(guò)Parameter對(duì)象賦值、使用。(3)Command對(duì)象(4)Parameter對(duì)象 Parameter對(duì)象的作用是將存儲(chǔ)過(guò)程和參數(shù)查詢所需的參數(shù)傳遞給Command對(duì)象。存儲(chǔ)過(guò)程是SQL語(yǔ)言的過(guò)程。一個(gè)Command對(duì)象上的所有Parameter對(duì)象構(gòu)成Parameters集合。(4)Parameter對(duì)象(5)Field對(duì)象 Field對(duì)象能夠使我們讀取記錄集(Recordset)對(duì)象中各個(gè)字段的字段值。定義在一個(gè)Recordset對(duì)象上的所有Field對(duì)象構(gòu)成Fields集合。(5)Field對(duì)象(6)Property對(duì)象 Property對(duì)象能夠指明一個(gè)ADO對(duì)象的屬性。所有的Property對(duì)象構(gòu)成Properties集合。這個(gè)集合與Connection、Command、Recordset或Field對(duì)象相關(guān)聯(lián)。(6)Property對(duì)象(7)Error對(duì)象 Error對(duì)象的作用是返回一個(gè)數(shù)據(jù)庫(kù)連接(Connection)上產(chǎn)生的錯(cuò)誤。 ADO對(duì)象及集合的關(guān)系如圖13-2所示。(7)Error對(duì)象第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)課件 在ADO的對(duì)象中,Connection、Command和Recordset三個(gè)對(duì)象是頂層對(duì)象,也是最重要的對(duì)象。我們能夠單獨(dú)的創(chuàng)建、釋放這三個(gè)對(duì)象。而其他對(duì)象,盡管可以單獨(dú)創(chuàng)建對(duì)象,但是在使用之前,必須與有關(guān)的對(duì)象相關(guān)聯(lián)。Field、Error和Property對(duì)象在其雙親對(duì)象存在的情況下才存在,不能單獨(dú)的創(chuàng)建這些對(duì)象。 在ADO的對(duì)象中,Connection、Command Connection對(duì)象用于建立應(yīng)用程序與數(shù)據(jù)庫(kù)的連接。在這個(gè)基礎(chǔ)之上,可以使用Command對(duì)象和Recordset對(duì)象對(duì)所連接的數(shù)據(jù)庫(kù)進(jìn)行各種操作。Command對(duì)象用于定義數(shù)據(jù)庫(kù)的查詢操作,主要采用SQL語(yǔ)言描述查詢動(dòng)作。Recordset對(duì)象對(duì)應(yīng)于Command對(duì)象的返回結(jié)果。當(dāng)然Recordset對(duì)象也可以直接建立一個(gè)Recordset,即不顯式地為Recordset創(chuàng)建Connection或Command對(duì)象,但實(shí)際上通過(guò)Recordset對(duì)象的一些參數(shù)設(shè)置了Connection對(duì)象和Command對(duì)象的屬性。 Connection對(duì)象用于建立應(yīng)用程序與數(shù)據(jù)庫(kù)的連接。13.2建立連接
13.2.1使用Connection對(duì)象建立連接 Connection對(duì)象用于應(yīng)用程序與服務(wù)器之間的連接。使用Connection對(duì)象可以確定以何種方式建立與服務(wù)器的連接,設(shè)置查詢條件,檢查整個(gè)處理過(guò)程中發(fā)生的錯(cuò)誤。13.2建立連接13.2.1使用Connec1.建立和關(guān)閉連接對(duì)象建立Connection對(duì)象的方法如下。<% DimobjCn setobjCn=Server.CreateObject ("ADODB.Connection")%>1.建立和關(guān)閉連接對(duì)象 “Server.CreateObject”的含義是執(zhí)行ASP內(nèi)置的Server對(duì)象的CreateObject方法,創(chuàng)建一個(gè)“ADODB.Connection”對(duì)象。新創(chuàng)建的連接對(duì)象實(shí)例被賦值給對(duì)象變量“objCn”,即ObjCn就是與數(shù)據(jù)庫(kù)建立連接的對(duì)象變量。 關(guān)閉Connection對(duì)象的方法是: <% objCn.Close %> “Server.CreateObject”的含義是執(zhí)行A “Close”是Connection對(duì)象的方法,其作用是關(guān)閉Connection對(duì)象,將應(yīng)用程序與數(shù)據(jù)庫(kù)的連接斷開(kāi)。但objCn仍在內(nèi)存中,沒(méi)有釋放所占用的空間。釋放對(duì)象變量的方法是: <% setobjCn=nothing %> “Close”是Connection對(duì)象的方法,其作用是2.與數(shù)據(jù)源建立連接 建立連接對(duì)象,僅僅是創(chuàng)建了一個(gè)Connection對(duì)象的實(shí)例,并沒(méi)有真正地與一個(gè)數(shù)據(jù)庫(kù)建立起連接。建立連接的操作通過(guò)Connection對(duì)象的Open方法實(shí)現(xiàn)。2.與數(shù)據(jù)源建立連接 Connection對(duì)象的Open方法的基本語(yǔ)法格式如下<連接對(duì)象名>.OpenConnectionString ConnectionString是連接參數(shù),指明了連接的數(shù)據(jù)庫(kù)類(lèi)型、名稱(chēng)等。 Connection對(duì)象的Open方法的基本語(yǔ)法格式如下 需要說(shuō)明的是,建立連接等操作的成功與否,在瀏覽器上沒(méi)有任何顯示。 不同類(lèi)別的數(shù)據(jù)庫(kù),具有不同的驅(qū)動(dòng)程序,相應(yīng)的具有不同的連接參數(shù)和格式。 需要說(shuō)明的是,建立連接等操作的成功與否,在瀏覽器上沒(méi)有任13.2.2Connection對(duì)象的屬性1.CommandTimeOut屬性
CommandTimeOut屬性用于設(shè)置等待時(shí)間。在使用Connection對(duì)象的Execute方法運(yùn)行一個(gè)查詢時(shí),如果由于網(wǎng)絡(luò)負(fù)擔(dān)過(guò)重或其他原因造成在指定的CommandTimeOut時(shí)間內(nèi)未能完成有關(guān)操作,則系統(tǒng)會(huì)自動(dòng)取消Execute方法的執(zhí)行。13.2.2Connection對(duì)象的屬性 如果將CommandTimeOut的屬性值設(shè)為0,則系統(tǒng)無(wú)限期等待命令的執(zhí)行。默認(rèn)值為30秒。2.ConnectionString屬性 ConnectionString屬性指定了與數(shù)據(jù)庫(kù)建立連接的參數(shù),包括所連接的數(shù)據(jù)庫(kù)類(lèi)型、名稱(chēng)等。連接參數(shù)是由若干形如“參數(shù)=值;”的表達(dá)式連接而成。 如果將CommandTimeOut的屬性值設(shè)為0,則系統(tǒng)3.ConnectionTimeOut屬性 ConnectionTimeOut屬性用于設(shè)置執(zhí)行Open方法時(shí)的超時(shí)時(shí)間。當(dāng)超過(guò)指定的ConnectionTimeOut時(shí)間仍未完成連接操作,系統(tǒng)自動(dòng)終止Open方法的執(zhí)行。如果設(shè)置ConnectionTimeOut為0,則程序一直等待Open方法的執(zhí)行,直到連接成功。ConnectionTimeOut屬性的默認(rèn)值為15秒。3.ConnectionTimeOut屬性4.DefaultDatabase屬性 DefaultDatabase屬性可以設(shè)置或返回Connection對(duì)象的默認(rèn)數(shù)據(jù)庫(kù)。4.DefaultDatabase屬性13.2.3通過(guò)Connection對(duì)象執(zhí)行查詢命令 ADO的Connection對(duì)象的主要作用是建立數(shù)據(jù)庫(kù)的連接。實(shí)際上,Connection對(duì)象還可以直接執(zhí)行查詢命令。使用Connection對(duì)象的Execute方法能夠執(zhí)行指定的SQL查詢命令或由SQL命令構(gòu)成的文本。13.2.3通過(guò)Connection對(duì)象執(zhí)行查詢命令 Execute方法格式如下:<連接對(duì)象>.ExecuteCommandText[,RecordsetAffectd][,Options] 其中的“CommandText”是包含表名的SQL語(yǔ)句?!癛ecordsetAffectd”是可選參數(shù),若需要知道執(zhí)行該命令所影響的記錄數(shù),可以在此放置一個(gè)變量,待命令執(zhí)行完畢,檢查該變量的值即可?!癘ptions”是可選參數(shù),用于指定CommandText的類(lèi)型,如存儲(chǔ)過(guò)程、命令等。 Execute方法格式如下:13.3Recordset對(duì)象 從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)記錄通過(guò)Recordset對(duì)象處理。使用Recordset對(duì)象,可以對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)表的數(shù)據(jù)進(jìn)行各種操作,如插入記錄、刪除記錄、更新記錄、檢索數(shù)據(jù)等。Recordset對(duì)象保存數(shù)據(jù)的方式類(lèi)似于二維表,包括字段和記錄。13.3Recordset對(duì)象 從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)記13.3.1建立Recordset對(duì)象 使用Recordset對(duì)象時(shí),需要聲明一個(gè)Recordset對(duì)象的實(shí)例,即創(chuàng)建一個(gè)Recordset對(duì)象的對(duì)象變量。其語(yǔ)法格式如下:Set對(duì)象變量=Server.CreateObject(“ADODB.Recordset”)13.3.1建立Recordset對(duì)象 以上命令的含義是建立一個(gè)ADODB.Recordset類(lèi)型的對(duì)象,并賦值給對(duì)象變量。對(duì)象變量建立后,可以使用Open方法建立一個(gè)Recordset。Recordset對(duì)象的Open方法的基本格式如下。<對(duì)象名>.OpenSource,ConnectionString Source是一個(gè)SQL命令,也就是查詢要求。ConnectionString是連接參數(shù)。 以上命令的含義是建立一個(gè)ADODB.Recordset類(lèi) 例如,從課程管理數(shù)據(jù)庫(kù)中讀取學(xué)生的基本信息,可以使用如下的命令。<% setRS=Server.CreateObject("ADODB.Recordset")cnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="_ &Server.MapPath("課程管理.mdb") RS.Open"Select*fromStudent",cnStr%> 例如,從課程管理數(shù)據(jù)庫(kù)中讀取學(xué)生的基本信息,可以使用如下 需要說(shuō)明的是可以使用多種方式建立Recordset對(duì)象。一種方式就是上面提到的直接使用Recordset對(duì)象的Open方法建立Recordset。另一種方法是首先建立一個(gè)Connection對(duì)象,然后使Connection對(duì)象與Recordset對(duì)象建立關(guān)聯(lián),從而得到建立了連接的Recordset對(duì)象。還有一種方法是通過(guò)Connection對(duì)象的Execute方法執(zhí)行有關(guān)查詢,產(chǎn)生Recordset對(duì)象,還可以通過(guò)Command對(duì)象建立Recordset對(duì)象。 需要說(shuō)明的是可以使用多種方式建立Recordset對(duì)象。13.3.2使用Recordset訪問(wèn)數(shù)據(jù)庫(kù)
從Recordset對(duì)象中讀取數(shù)據(jù)記錄時(shí)需要使用“記錄指針”。從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)、建立Recordset后,有一個(gè)“記錄指針”指向第一條記錄。此時(shí),可以讀取這條記錄中各個(gè)字段的數(shù)據(jù),而且只能讀取這條記錄的數(shù)據(jù)。就是說(shuō),在同一個(gè)時(shí)刻只能讀取當(dāng)前記錄中的數(shù)據(jù),即記錄指針?biāo)赶虻挠涗?。如果要讀取其他記錄的數(shù)據(jù)時(shí),必須把“記錄指針”移動(dòng)到要訪問(wèn)的記錄上。13.3.2使用Recordset訪問(wèn)數(shù)據(jù)庫(kù)1.讀取數(shù)據(jù)例13.3讀取Recordset中的字段。<%@Language=VBScript%><HTML><HEAD>使用Recordset讀取數(shù)據(jù)<P>1.讀取數(shù)據(jù)</HEAD><BODY><% SetRS=Server.CreateObject("ADODB.Recordset")cnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="_ &Server.MapPath("課程管理.mdb") RS.Open"Select*fromstudent",cnStr </HEAD>ifNotRS.EOFthen tmpNumber=RS("SNumber") tmpName=RS("SName") tmpSex=RS("SSex") tmpBirthDay=RS("SBirthday") tmpAddr=RS("SAddress") tmpZip=RS("SZip") tmpSign=RS("SSign") endif
ifNotRS.EOFthenResponse.WritetmpNumber+tmpName%></BODY></HTML>Response.WritetmpNumber+tmpNa2.輸入數(shù)據(jù) 除了前面提到的使用Connection對(duì)象的Execute方法執(zhí)行SQL命令插入記錄之外,還可以使用Recordset對(duì)象插入記錄。具體做法是首先在Recordset中添加一個(gè)空白記錄,然后,為各個(gè)字段賦值。2.輸入數(shù)據(jù)例13.4以下是在記錄集中添加一條新記錄的示例。<%RS.AddNewRS("SNumber")="98082210"RS("SName")="張紅"RS("SSex")="女"RS("出生日期")=Cdate("1980-2-10")RS("地址")="白頤路20號(hào)"RS("郵政編碼")="100080"RS("入學(xué)成績(jī)")=480RS.Update%>例13.4以下是在記錄集中添加一條新記錄的示例。3.刪除記錄 Recordset提供了刪除對(duì)象的方法。 Recordset對(duì)象的Delete方法的作用是刪除當(dāng)前記錄指針?biāo)赶虻挠涗洠? <% Rs.Delete %>3.刪除記錄13.3.3Recordset對(duì)象的主要屬性 1.AbsolutePage屬性 AbsolutePage屬性可以返回當(dāng)前記錄所在頁(yè)的絕對(duì)頁(yè)號(hào),也可以指定當(dāng)前記錄應(yīng)該放置在哪頁(yè)。13.3.3Recordset對(duì)象的主要屬性 2.AbsolutePosition屬性 當(dāng)前記錄指針的絕對(duì)位置。在正常情況下,其值在1-RecordCount(Recordset對(duì)象中記錄的個(gè)數(shù))之間,或是常數(shù)值。在Recordset內(nèi),第一條記錄對(duì)應(yīng)的AbsolutePosition值為1;最后一條記錄的AbsolutePosition值為RecordCount。2.AbsolutePosition屬性3.ActiveConnection屬性
ActiveConnection屬性是包含連接信息的連接字符串,包括數(shù)據(jù)源、用戶名、口令等。如果已經(jīng)建立了連接,通過(guò)ActiveConnection屬性,Recordset對(duì)象和Command對(duì)象能夠與Connection對(duì)象建立關(guān)聯(lián)。我們可以通過(guò)ActiveConnection屬性使Connection對(duì)象和Recordset對(duì)象建立關(guān)聯(lián)。我們還可以通過(guò)ActiveConnection屬性讀取與當(dāng)前數(shù)據(jù)庫(kù)的連接有關(guān)的參數(shù)。3.ActiveConnection屬性4.BOF屬性 BOF屬性檢查、判明當(dāng)前記錄指針是否在第一條記錄之前,并返回檢查的結(jié)果。如果當(dāng)前記錄指針已經(jīng)移到第一條記錄之前,BOF為真;否則為假。一般情況下,在向前移動(dòng)記錄指針時(shí),通過(guò)檢測(cè)BOF的值,可以判斷是否已經(jīng)到達(dá)第一條記錄之前。4.BOF屬性5.CursorLocation屬性 Cursor稱(chēng)為游標(biāo)。CursorLocation屬性用于選擇所使用的游標(biāo)庫(kù)。當(dāng)CursorLocation的值為2,其常數(shù)定義為adUseServer,表示使用服務(wù)器端的游標(biāo)庫(kù)。當(dāng)CursorLocation的值為1,其常數(shù)定義為adUseClient,表示使用客戶端的游標(biāo)庫(kù)。5.CursorLocation屬性6.CursorType屬性 在使用Recordset讀取數(shù)據(jù)時(shí)涉及到使用記錄指針。不同類(lèi)型的記錄指針具有不同的指針移動(dòng)方式。在打開(kāi)Recordset時(shí),需要指定記錄指針的類(lèi)型,即CursorType屬性。系統(tǒng)提供了四種CursorType值,其含義和屬性值見(jiàn)表13-2。6.CursorType屬性第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)課件7.EditMode屬性 EditMode屬性能夠返回Recordset對(duì)象當(dāng)前的編輯模式:0表示目前處理的Recordset中沒(méi)有任何編輯操作;1表示正在進(jìn)行編輯操作,但是尚未保存到數(shù)據(jù)庫(kù)中;2表示正在增加記錄,但是尚未保存到數(shù)據(jù)庫(kù)中;4表示當(dāng)前記錄被刪除。7.EditMode屬性8.EOF屬性 EOF屬性用于判斷記錄指針是否到達(dá)Recordset的末尾。當(dāng)EOF的值為T(mén)rue,表示記錄指針位于最后一條記錄之后。9.Filter屬性 Filter屬性可以在Recordset對(duì)象中設(shè)置對(duì)數(shù)據(jù)的篩選條件,使被過(guò)濾出來(lái)的Recordset成為當(dāng)前Recordset。8.EOF屬性10.LockType屬性 LockType屬性用于設(shè)置當(dāng)前記錄的鎖定方式,以確定是否可以將記錄寫(xiě)入數(shù)據(jù)庫(kù)。11.MaxRecords屬性 MaxRecords屬性用于設(shè)置從數(shù)據(jù)源一次返回的最大記錄數(shù)。MaxRecords屬性的默認(rèn)值為0,表示返回所有記錄。10.LockType屬性12.PageCount屬性 PageCount屬性指明當(dāng)前Recordset對(duì)象所包含的頁(yè)數(shù)。每一頁(yè)包括一組記錄,其記錄的數(shù)量由PageSize屬性設(shè)置。13.PageSize屬性 當(dāng)Recordset對(duì)象設(shè)置了分頁(yè),使用PageSize屬性設(shè)置每頁(yè)的記錄數(shù)。PageSize屬性的默認(rèn)值為10,即每一頁(yè)有10條記錄。12.PageCount屬性14.RecordCount屬性 使用RecordCount屬性能夠確定Recordset中有多少條記錄。如果ADO無(wú)法判斷記錄總數(shù),則返回-1。需要說(shuō)明的是如果Recordset以adOpenForwardOnly方式打開(kāi),則RecordCount屬性不起作用。14.RecordCount屬性15.Source屬性 Source屬性指明Recordset對(duì)象的數(shù)據(jù)來(lái)源。16.State屬性 State屬性可以返回Recordset對(duì)象的狀態(tài)。15.Source屬性17.Status屬性 Status屬性能夠返回記錄處理是否成功的信息。13.3.4Recordset的主要方法1.Open方法 Open方法的完整格式如下。對(duì)象變量.OpenSource,Connection,CursorType,LockType,Type17.Status屬性 Open方法中各項(xiàng)參數(shù)的含義如下。 “Source”是一個(gè)字符串。指明要從數(shù)據(jù)庫(kù)中選取的數(shù)據(jù)。數(shù)據(jù)源可以是Command對(duì)象、SQL語(yǔ)句、存儲(chǔ)過(guò)程、表名或文件的全路徑。 Open方法中各項(xiàng)參數(shù)的含義如下。 Connection表示數(shù)據(jù)庫(kù)連接的名稱(chēng)。可以使用三種方式表達(dá)所要連接的數(shù)據(jù)庫(kù)。第一種方式是直接使用已經(jīng)建立連接的Connection對(duì)象變量;第二種方式使用連接參數(shù)字符串;第三種方式使用ODBC數(shù)據(jù)源名稱(chēng)。連接參數(shù)可以通過(guò)Recordset對(duì)象的ConnectionString屬性設(shè)置。
Connection表示數(shù)據(jù)庫(kù)連接的名稱(chēng)??梢允褂? CursorType指明Recordset對(duì)象打開(kāi)數(shù)據(jù)庫(kù)時(shí)所使用的記錄指針類(lèi)型。 LockType是可選參數(shù),它確定了打開(kāi)Recordset對(duì)象時(shí)的鎖定類(lèi)型。
Type是可選參數(shù),用于指定打開(kāi)Recordset對(duì)象時(shí)對(duì)應(yīng)的Command對(duì)象的CommandType類(lèi)型。 CursorType指明Recordset對(duì)象打開(kāi)2.Close方法 Close方法的作用是關(guān)閉一個(gè)Recordset對(duì)象,釋放相關(guān)的數(shù)據(jù),即為這個(gè)Recordset所申請(qǐng)的資源。使用Close方法不能將Recordset對(duì)象從內(nèi)存中清除。 釋放對(duì)象變量的命令如下。Set<對(duì)象名>=nothing2.Close方法3.Update方法 Update方法的功能是將Recordset對(duì)象中當(dāng)前記錄保存到數(shù)據(jù)庫(kù)中。4.AddNew方法 AddNew方法的作用是在Recordset對(duì)象中添加一條記錄。AddNew方法的語(yǔ)法格式如下。Recoreset.AddNewFieldList,Values3.Update方法 其中FieldList是一個(gè)字段或字段數(shù)組的名稱(chēng);Values是相應(yīng)的一個(gè)字段值或用數(shù)組表示的字段值。FieldList和Values都是可選參數(shù)。如果使用沒(méi)有參數(shù)的AddNew方法,則在Recordset中插入一個(gè)空白記錄。 其中FieldList是一個(gè)字段或字段數(shù)組的名稱(chēng);Val 使用AddNew方法向Recordset中添加記錄的方法有兩種:一種方法是在Recordset中添加一個(gè)空白記錄,再向這個(gè)空白記錄的字段中輸入數(shù)據(jù);另一種方法是先為數(shù)組賦值,再使用AddNew方法將數(shù)組中的數(shù)據(jù)添加到Recordset中。需要特別注意的是使用AddNew方法添加到Recordset中的數(shù)據(jù)并沒(méi)有保存到數(shù)據(jù)庫(kù)中,必須使用Update方法才能真正將Recordset中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。 使用AddNew方法向Recordset中添加記錄的方法5.Delete方法 使用Delete方法能夠刪除Recordset對(duì)象中一條或多條記錄。Delete方法的語(yǔ)法格式如下。Recordset.DeleteAffect 以上命令中的Affect表示刪除數(shù)據(jù)的范圍。當(dāng)該參數(shù)的值為1時(shí),只能刪除當(dāng)前的記錄;參數(shù)的值為2時(shí),則可以將所有與Filter屬性所設(shè)條件相匹配的記錄刪除掉。5.Delete方法6.移動(dòng)記錄指針的方法 從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)都被放在Recordset對(duì)象中。而對(duì)Recordset對(duì)象中的數(shù)據(jù)進(jìn)行操作時(shí)需要使用記錄指針。Recordset對(duì)象提供了一組移動(dòng)記錄指針的方法,使用這一組方法,就能夠比較方便的操作數(shù)據(jù)。6.移動(dòng)記錄指針的方法(1)MoveNumRecords “MoveNumRecords,Start”方法的作用是在Recordset對(duì)象內(nèi),將記錄指針從“Start”位置開(kāi)始移動(dòng)“NumRecords”條記錄。(2)MoveFirst “MoveFirst”方法的作用是在Recordset對(duì)象內(nèi),將記錄指針移動(dòng)到第一條記錄上。(1)MoveNumRecords(3)MoveLast “MoveLast”方法的作用是在Recordset對(duì)象內(nèi),將記錄指針移動(dòng)到最后一條記錄上。(4)MoveNext “MoveNext”方法的作用是在Recordset對(duì)象內(nèi),將記錄指針向后(即記錄號(hào)增加的方向)移動(dòng)一條記錄。(3)MoveLast(5)MovePrevious “MovePrevious”方法的作用是在Recordset對(duì)象內(nèi),將記錄指針向前移動(dòng)一條記錄。(5)MovePrevious7.CancelUpdate方法 當(dāng)Recordset中的記錄尚未寫(xiě)到數(shù)據(jù)庫(kù)中時(shí),也就是說(shuō),在Recordset中插入、刪除或更新了數(shù)據(jù),但是還沒(méi)有使用Update方法時(shí),若需要撤銷(xiāo)對(duì)Recordset中記錄的更新操作,可以使用CancelUpdate方法。CancelUpdate方法的功能是取消對(duì)Recordset對(duì)象的更新操作。7.CancelUpdate方法8.Clone方法 Clone方法的功能是復(fù)制某個(gè)已經(jīng)存在的Recordset對(duì)象。復(fù)制得到的新Recordset對(duì)象與原來(lái)的Recordset對(duì)象具有相同的記錄集,但是各自擁有獨(dú)立的記錄指針。8.Clone方法13.3.5Recordset的Fields集合 Recordset提供了一個(gè)Fields集合,F(xiàn)ields集合的每一項(xiàng)都是一個(gè)Field對(duì)象。每個(gè)Field對(duì)象擁有一個(gè)名字及序號(hào),分別對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的字段。 我們可以利用Fields集合的Count屬性讀取表中的字段個(gè)數(shù),使用Field對(duì)象的Name和Value分別讀取字段名稱(chēng)和字段數(shù)據(jù)。13.3.5Recordset的Fields集合13.4Command對(duì)象 Command對(duì)象能夠用來(lái)執(zhí)行查詢命令,并將滿足條件的記錄返回到Recordset對(duì)象。Command對(duì)象所執(zhí)行的這些命令可以是SQL語(yǔ)句、存儲(chǔ)過(guò)程、數(shù)據(jù)庫(kù)表或系統(tǒng)能夠支持的其他格式的文件。13.4Command對(duì)象 Command對(duì)象能夠用來(lái)13.4.1建立Command對(duì)象 建立Command對(duì)象的方法是使用ASP內(nèi)置的Server對(duì)象的CreateObject方法,命令格式如下。Set<對(duì)象名>=Server.CreateObject("ADODB.Command") 其中“對(duì)象名”所表示的是Command對(duì)象的一個(gè)實(shí)例。然后,需要將這個(gè)對(duì)象實(shí)例與Connection對(duì)象建立連接。13.4.1建立Command對(duì)象 與Recordset對(duì)象不同,Command對(duì)象不需要直接進(jìn)行打開(kāi)和關(guān)閉的操作。當(dāng)關(guān)閉一個(gè)Connection對(duì)象時(shí),與該連接相關(guān)的所有Command對(duì)象同時(shí)被關(guān)閉,不需要單獨(dú)使用關(guān)閉命令。 與Recordset對(duì)象不同,Command對(duì)象不需要直13.4.2Command對(duì)象的主要屬性1.ActiveConnection屬性 ActiveConnection屬性指明了當(dāng)前Command對(duì)象所連接的Connection對(duì)象。如果在執(zhí)行Execute方法時(shí),尚未指定合法的連接參數(shù),或者沒(méi)有打開(kāi)一個(gè)可用的Connection對(duì)象,系統(tǒng)會(huì)產(chǎn)生錯(cuò)誤。13.4.2Command對(duì)象的主要屬性2.CommandType屬性 Command對(duì)象能夠使用多種類(lèi)型的查詢命令。用CommandType屬性能夠確定查詢命令的類(lèi)型。實(shí)際上,這些類(lèi)型與Recordset對(duì)象Open方法中指定的Type類(lèi)型是一致的。2.CommandType屬性3.CommandText屬性 CommandType屬性值是指明查詢命令的類(lèi)型,查詢命令的具體內(nèi)容則由CommandText屬性確定。CommandText屬性可以是SQL語(yǔ)句、數(shù)據(jù)庫(kù)表名或存儲(chǔ)過(guò)程名。3.CommandText屬性4.CommandTimeout屬性 默認(rèn)情況下,若執(zhí)行Command對(duì)象的等待時(shí)間超過(guò)30秒仍然沒(méi)有結(jié)束,則停止執(zhí)行命令。如果需要改變這個(gè)等待時(shí)間,可以改變CommandTimeout屬性,重新設(shè)置等待時(shí)間。若設(shè)置CommandTimeout屬性為0,則系統(tǒng)無(wú)限期等待命令的執(zhí)行,直到完成。4.CommandTimeout屬性 需要說(shuō)明的是Connection對(duì)象也有一個(gè)CommandTimeOut屬性。但是Connection對(duì)象的CommandTimeOut屬性與Command對(duì)象的CommandTimeOut屬性是彼此獨(dú)立的,相互之間不會(huì)有影響。 需要說(shuō)明的是Connection對(duì)象也有一個(gè)Comman13.4.3Command的常用方法1.Execute方法 Execute是Command對(duì)象的一個(gè)非常重要的方法。使用Execute方法能夠執(zhí)行在CommandText中定義的查詢命令。如果所執(zhí)行的查詢有返回記錄,則查詢結(jié)果存放在Recordset對(duì)象中。13.4.3Command的常用方法Execute的語(yǔ)法格式如下。Set<記錄集名稱(chēng)>=Command.Execute(Count,Parameter,Option)Execute的語(yǔ)法格式如下。 其中Count是可選參數(shù),表示執(zhí)行本次查詢數(shù)據(jù)庫(kù)中滿足指定條件的記錄數(shù);Parameter是可選參數(shù),包含需要傳遞給存儲(chǔ)過(guò)程的參數(shù);Option也是可選參數(shù),指明CommandText的類(lèi)型,實(shí)際上就是CommandType的屬性值,可以省略。 其中Count是可選參數(shù),表示執(zhí)行本次查詢數(shù)據(jù)庫(kù)中滿足指2.CreateParamater方法 在使用SQL命令或存儲(chǔ)過(guò)程進(jìn)行查詢時(shí),查詢條件中往往需要指定一些參數(shù),然后按指定的參數(shù)進(jìn)行查詢。2.CreateParamater方法第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)13.1ASP與ADO
13.2建立連接13.3Recordset對(duì)象13.4Command對(duì)象第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)13.1ASP與ADO ASP提供了強(qiáng)大的訪問(wèn)數(shù)據(jù)庫(kù)的功能。用ASP訪問(wèn)數(shù)據(jù)庫(kù)所使用的是ADO(ActiveXDataObjects)組件。 使用ADO編寫(xiě)的ASP程序,不僅能夠訪問(wèn)Access數(shù)據(jù)庫(kù),能夠訪問(wèn)包括Oracle、MSSQLServer、Sybase等支持OLEDB、ODBC的數(shù)據(jù)庫(kù)。 ASP提供了強(qiáng)大的訪問(wèn)數(shù)據(jù)庫(kù)的功能。用ASP訪問(wèn)數(shù)據(jù)庫(kù)所13.1ASP與ADO13.1.1ASP與數(shù)據(jù)庫(kù) 通過(guò)ADO對(duì)象,ASP可以訪問(wèn)Oracle、Sybase、MSSQLServer、Access、FoxPro等各種支持ODBC或OLEDB的數(shù)據(jù)庫(kù)。也就是說(shuō),只要具有某種數(shù)據(jù)庫(kù)的ODBC或OLEDB驅(qū)動(dòng)程序,就可以通過(guò)ADO訪問(wèn)數(shù)據(jù)庫(kù)。ASP、ADO、OLEDB及各種數(shù)據(jù)庫(kù)之間的關(guān)系如圖13-1所示。13.1ASP與ADO13.1.1ASP與數(shù)據(jù)庫(kù)第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)課件13.1.2ADO的概念和結(jié)構(gòu) ODBC(OpenDatabaseConnectivity)是微軟公司開(kāi)發(fā)的一套開(kāi)放數(shù)據(jù)庫(kù)應(yīng)用程序的接口規(guī)范,是廣泛使用的數(shù)據(jù)庫(kù)接口。使用ODBC開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的方法是建立ODBC數(shù)據(jù)源,通過(guò)ODBC接口函數(shù),提交SQL語(yǔ)句并接收?qǐng)?zhí)行SQL命令的結(jié)果。數(shù)據(jù)庫(kù)的底層操作由各個(gè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序完成。13.1.2ADO的概念和結(jié)構(gòu) OLEDB是以ActiveX技術(shù)為基礎(chǔ)的數(shù)據(jù)訪問(wèn)技術(shù)標(biāo)準(zhǔn)。OLEDB基于組件模型;可以訪問(wèn)多種格式的數(shù)據(jù),包括數(shù)據(jù)庫(kù)的數(shù)據(jù)和非數(shù)據(jù)庫(kù)的數(shù)據(jù)。OLEDB標(biāo)準(zhǔn)的具體實(shí)現(xiàn)是一組API函數(shù)。使用OLEDBAPI,可以編寫(xiě)能夠訪問(wèn)符合OLEDB標(biāo)準(zhǔn)的任何數(shù)據(jù)源應(yīng)用程序。 OLEDB是以ActiveX技術(shù)為基礎(chǔ)的數(shù)據(jù)訪問(wèn)技術(shù)標(biāo) 為了使各種流行的編程語(yǔ)言都能編寫(xiě)符合OLEDB標(biāo)準(zhǔn)的應(yīng)用程序,微軟公司在OLEDBAPI之上提供了一種面向?qū)ο蟮?、與語(yǔ)言無(wú)關(guān)的應(yīng)用程序編寫(xiě)接口,就是ADO。 ADO是一項(xiàng)數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。ADO具有如下優(yōu)點(diǎn)。 為了使各種流行的編程語(yǔ)言都能編寫(xiě)符合OLEDB標(biāo)準(zhǔn)的應(yīng) 對(duì)于程序設(shè)計(jì)者而言,ADO很容易掌握和使用。 ADO能夠被VisualBasic、Java、C++、VBScript及Jscript等程序設(shè)計(jì)語(yǔ)言所支持。 ADO能夠訪問(wèn)各種支持OLEDB的數(shù)據(jù)源,也就是說(shuō),通過(guò)ADO能夠訪問(wèn)具有OLEDB驅(qū)動(dòng)程序的數(shù)據(jù)源。 ADO允許C++的程序員訪問(wèn)OLEDB的底層接口。 對(duì)于程序設(shè)計(jì)者而言,ADO很容易掌握和使用。 ADO包括7個(gè)對(duì)象及集合,其主要作用描述如下。(1)Connection對(duì)象 Connection對(duì)象用于建立數(shù)據(jù)源與ADO應(yīng)用程序之間的連接。 ADO包括7個(gè)對(duì)象及集合,其主要作用描述如下。(2)Recordset對(duì)象 Recordset對(duì)象是ADO中最重要的對(duì)象之一,是對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢索后的數(shù)據(jù)記錄集。這個(gè)記錄集既可以是Command對(duì)象返回的查詢結(jié)果,也可以是直接運(yùn)行SQL命令產(chǎn)生的查詢結(jié)果。Recordset對(duì)象把數(shù)據(jù)庫(kù)檢索的結(jié)果封裝在一起,并通過(guò)它的方法和屬性提供一種方便、快捷地訪問(wèn)每條記錄、每個(gè)字段的方法。(2)Recordset對(duì)象(3)Command對(duì)象 Command對(duì)象用于定義數(shù)據(jù)庫(kù)的查詢動(dòng)作,一般使用SQL命令,也可以使用存儲(chǔ)過(guò)程。 Command對(duì)象允許指定參數(shù),其參數(shù)通過(guò)Parameter對(duì)象賦值、使用。(3)Command對(duì)象(4)Parameter對(duì)象 Parameter對(duì)象的作用是將存儲(chǔ)過(guò)程和參數(shù)查詢所需的參數(shù)傳遞給Command對(duì)象。存儲(chǔ)過(guò)程是SQL語(yǔ)言的過(guò)程。一個(gè)Command對(duì)象上的所有Parameter對(duì)象構(gòu)成Parameters集合。(4)Parameter對(duì)象(5)Field對(duì)象 Field對(duì)象能夠使我們讀取記錄集(Recordset)對(duì)象中各個(gè)字段的字段值。定義在一個(gè)Recordset對(duì)象上的所有Field對(duì)象構(gòu)成Fields集合。(5)Field對(duì)象(6)Property對(duì)象 Property對(duì)象能夠指明一個(gè)ADO對(duì)象的屬性。所有的Property對(duì)象構(gòu)成Properties集合。這個(gè)集合與Connection、Command、Recordset或Field對(duì)象相關(guān)聯(lián)。(6)Property對(duì)象(7)Error對(duì)象 Error對(duì)象的作用是返回一個(gè)數(shù)據(jù)庫(kù)連接(Connection)上產(chǎn)生的錯(cuò)誤。 ADO對(duì)象及集合的關(guān)系如圖13-2所示。(7)Error對(duì)象第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)課件 在ADO的對(duì)象中,Connection、Command和Recordset三個(gè)對(duì)象是頂層對(duì)象,也是最重要的對(duì)象。我們能夠單獨(dú)的創(chuàng)建、釋放這三個(gè)對(duì)象。而其他對(duì)象,盡管可以單獨(dú)創(chuàng)建對(duì)象,但是在使用之前,必須與有關(guān)的對(duì)象相關(guān)聯(lián)。Field、Error和Property對(duì)象在其雙親對(duì)象存在的情況下才存在,不能單獨(dú)的創(chuàng)建這些對(duì)象。 在ADO的對(duì)象中,Connection、Command Connection對(duì)象用于建立應(yīng)用程序與數(shù)據(jù)庫(kù)的連接。在這個(gè)基礎(chǔ)之上,可以使用Command對(duì)象和Recordset對(duì)象對(duì)所連接的數(shù)據(jù)庫(kù)進(jìn)行各種操作。Command對(duì)象用于定義數(shù)據(jù)庫(kù)的查詢操作,主要采用SQL語(yǔ)言描述查詢動(dòng)作。Recordset對(duì)象對(duì)應(yīng)于Command對(duì)象的返回結(jié)果。當(dāng)然Recordset對(duì)象也可以直接建立一個(gè)Recordset,即不顯式地為Recordset創(chuàng)建Connection或Command對(duì)象,但實(shí)際上通過(guò)Recordset對(duì)象的一些參數(shù)設(shè)置了Connection對(duì)象和Command對(duì)象的屬性。 Connection對(duì)象用于建立應(yīng)用程序與數(shù)據(jù)庫(kù)的連接。13.2建立連接
13.2.1使用Connection對(duì)象建立連接 Connection對(duì)象用于應(yīng)用程序與服務(wù)器之間的連接。使用Connection對(duì)象可以確定以何種方式建立與服務(wù)器的連接,設(shè)置查詢條件,檢查整個(gè)處理過(guò)程中發(fā)生的錯(cuò)誤。13.2建立連接13.2.1使用Connec1.建立和關(guān)閉連接對(duì)象建立Connection對(duì)象的方法如下。<% DimobjCn setobjCn=Server.CreateObject ("ADODB.Connection")%>1.建立和關(guān)閉連接對(duì)象 “Server.CreateObject”的含義是執(zhí)行ASP內(nèi)置的Server對(duì)象的CreateObject方法,創(chuàng)建一個(gè)“ADODB.Connection”對(duì)象。新創(chuàng)建的連接對(duì)象實(shí)例被賦值給對(duì)象變量“objCn”,即ObjCn就是與數(shù)據(jù)庫(kù)建立連接的對(duì)象變量。 關(guān)閉Connection對(duì)象的方法是: <% objCn.Close %> “Server.CreateObject”的含義是執(zhí)行A “Close”是Connection對(duì)象的方法,其作用是關(guān)閉Connection對(duì)象,將應(yīng)用程序與數(shù)據(jù)庫(kù)的連接斷開(kāi)。但objCn仍在內(nèi)存中,沒(méi)有釋放所占用的空間。釋放對(duì)象變量的方法是: <% setobjCn=nothing %> “Close”是Connection對(duì)象的方法,其作用是2.與數(shù)據(jù)源建立連接 建立連接對(duì)象,僅僅是創(chuàng)建了一個(gè)Connection對(duì)象的實(shí)例,并沒(méi)有真正地與一個(gè)數(shù)據(jù)庫(kù)建立起連接。建立連接的操作通過(guò)Connection對(duì)象的Open方法實(shí)現(xiàn)。2.與數(shù)據(jù)源建立連接 Connection對(duì)象的Open方法的基本語(yǔ)法格式如下<連接對(duì)象名>.OpenConnectionString ConnectionString是連接參數(shù),指明了連接的數(shù)據(jù)庫(kù)類(lèi)型、名稱(chēng)等。 Connection對(duì)象的Open方法的基本語(yǔ)法格式如下 需要說(shuō)明的是,建立連接等操作的成功與否,在瀏覽器上沒(méi)有任何顯示。 不同類(lèi)別的數(shù)據(jù)庫(kù),具有不同的驅(qū)動(dòng)程序,相應(yīng)的具有不同的連接參數(shù)和格式。 需要說(shuō)明的是,建立連接等操作的成功與否,在瀏覽器上沒(méi)有任13.2.2Connection對(duì)象的屬性1.CommandTimeOut屬性
CommandTimeOut屬性用于設(shè)置等待時(shí)間。在使用Connection對(duì)象的Execute方法運(yùn)行一個(gè)查詢時(shí),如果由于網(wǎng)絡(luò)負(fù)擔(dān)過(guò)重或其他原因造成在指定的CommandTimeOut時(shí)間內(nèi)未能完成有關(guān)操作,則系統(tǒng)會(huì)自動(dòng)取消Execute方法的執(zhí)行。13.2.2Connection對(duì)象的屬性 如果將CommandTimeOut的屬性值設(shè)為0,則系統(tǒng)無(wú)限期等待命令的執(zhí)行。默認(rèn)值為30秒。2.ConnectionString屬性 ConnectionString屬性指定了與數(shù)據(jù)庫(kù)建立連接的參數(shù),包括所連接的數(shù)據(jù)庫(kù)類(lèi)型、名稱(chēng)等。連接參數(shù)是由若干形如“參數(shù)=值;”的表達(dá)式連接而成。 如果將CommandTimeOut的屬性值設(shè)為0,則系統(tǒng)3.ConnectionTimeOut屬性 ConnectionTimeOut屬性用于設(shè)置執(zhí)行Open方法時(shí)的超時(shí)時(shí)間。當(dāng)超過(guò)指定的ConnectionTimeOut時(shí)間仍未完成連接操作,系統(tǒng)自動(dòng)終止Open方法的執(zhí)行。如果設(shè)置ConnectionTimeOut為0,則程序一直等待Open方法的執(zhí)行,直到連接成功。ConnectionTimeOut屬性的默認(rèn)值為15秒。3.ConnectionTimeOut屬性4.DefaultDatabase屬性 DefaultDatabase屬性可以設(shè)置或返回Connection對(duì)象的默認(rèn)數(shù)據(jù)庫(kù)。4.DefaultDatabase屬性13.2.3通過(guò)Connection對(duì)象執(zhí)行查詢命令 ADO的Connection對(duì)象的主要作用是建立數(shù)據(jù)庫(kù)的連接。實(shí)際上,Connection對(duì)象還可以直接執(zhí)行查詢命令。使用Connection對(duì)象的Execute方法能夠執(zhí)行指定的SQL查詢命令或由SQL命令構(gòu)成的文本。13.2.3通過(guò)Connection對(duì)象執(zhí)行查詢命令 Execute方法格式如下:<連接對(duì)象>.ExecuteCommandText[,RecordsetAffectd][,Options] 其中的“CommandText”是包含表名的SQL語(yǔ)句。“RecordsetAffectd”是可選參數(shù),若需要知道執(zhí)行該命令所影響的記錄數(shù),可以在此放置一個(gè)變量,待命令執(zhí)行完畢,檢查該變量的值即可。“Options”是可選參數(shù),用于指定CommandText的類(lèi)型,如存儲(chǔ)過(guò)程、命令等。 Execute方法格式如下:13.3Recordset對(duì)象 從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)記錄通過(guò)Recordset對(duì)象處理。使用Recordset對(duì)象,可以對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)表的數(shù)據(jù)進(jìn)行各種操作,如插入記錄、刪除記錄、更新記錄、檢索數(shù)據(jù)等。Recordset對(duì)象保存數(shù)據(jù)的方式類(lèi)似于二維表,包括字段和記錄。13.3Recordset對(duì)象 從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)記13.3.1建立Recordset對(duì)象 使用Recordset對(duì)象時(shí),需要聲明一個(gè)Recordset對(duì)象的實(shí)例,即創(chuàng)建一個(gè)Recordset對(duì)象的對(duì)象變量。其語(yǔ)法格式如下:Set對(duì)象變量=Server.CreateObject(“ADODB.Recordset”)13.3.1建立Recordset對(duì)象 以上命令的含義是建立一個(gè)ADODB.Recordset類(lèi)型的對(duì)象,并賦值給對(duì)象變量。對(duì)象變量建立后,可以使用Open方法建立一個(gè)Recordset。Recordset對(duì)象的Open方法的基本格式如下。<對(duì)象名>.OpenSource,ConnectionString Source是一個(gè)SQL命令,也就是查詢要求。ConnectionString是連接參數(shù)。 以上命令的含義是建立一個(gè)ADODB.Recordset類(lèi) 例如,從課程管理數(shù)據(jù)庫(kù)中讀取學(xué)生的基本信息,可以使用如下的命令。<% setRS=Server.CreateObject("ADODB.Recordset")cnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="_ &Server.MapPath("課程管理.mdb") RS.Open"Select*fromStudent",cnStr%> 例如,從課程管理數(shù)據(jù)庫(kù)中讀取學(xué)生的基本信息,可以使用如下 需要說(shuō)明的是可以使用多種方式建立Recordset對(duì)象。一種方式就是上面提到的直接使用Recordset對(duì)象的Open方法建立Recordset。另一種方法是首先建立一個(gè)Connection對(duì)象,然后使Connection對(duì)象與Recordset對(duì)象建立關(guān)聯(lián),從而得到建立了連接的Recordset對(duì)象。還有一種方法是通過(guò)Connection對(duì)象的Execute方法執(zhí)行有關(guān)查詢,產(chǎn)生Recordset對(duì)象,還可以通過(guò)Command對(duì)象建立Recordset對(duì)象。 需要說(shuō)明的是可以使用多種方式建立Recordset對(duì)象。13.3.2使用Recordset訪問(wèn)數(shù)據(jù)庫(kù)
從Recordset對(duì)象中讀取數(shù)據(jù)記錄時(shí)需要使用“記錄指針”。從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)、建立Recordset后,有一個(gè)“記錄指針”指向第一條記錄。此時(shí),可以讀取這條記錄中各個(gè)字段的數(shù)據(jù),而且只能讀取這條記錄的數(shù)據(jù)。就是說(shuō),在同一個(gè)時(shí)刻只能讀取當(dāng)前記錄中的數(shù)據(jù),即記錄指針?biāo)赶虻挠涗洝H绻x取其他記錄的數(shù)據(jù)時(shí),必須把“記錄指針”移動(dòng)到要訪問(wèn)的記錄上。13.3.2使用Recordset訪問(wèn)數(shù)據(jù)庫(kù)1.讀取數(shù)據(jù)例13.3讀取Recordset中的字段。<%@Language=VBScript%><HTML><HEAD>使用Recordset讀取數(shù)據(jù)<P>1.讀取數(shù)據(jù)</HEAD><BODY><% SetRS=Server.CreateObject("ADODB.Recordset")cnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="_ &Server.MapPath("課程管理.mdb") RS.Open"Select*fromstudent",cnStr </HEAD>ifNotRS.EOFthen tmpNumber=RS("SNumber") tmpName=RS("SName") tmpSex=RS("SSex") tmpBirthDay=RS("SBirthday") tmpAddr=RS("SAddress") tmpZip=RS("SZip") tmpSign=RS("SSign") endif
ifNotRS.EOFthenResponse.WritetmpNumber+tmpName%></BODY></HTML>Response.WritetmpNumber+tmpNa2.輸入數(shù)據(jù) 除了前面提到的使用Connection對(duì)象的Execute方法執(zhí)行SQL命令插入記錄之外,還可以使用Recordset對(duì)象插入記錄。具體做法是首先在Recordset中添加一個(gè)空白記錄,然后,為各個(gè)字段賦值。2.輸入數(shù)據(jù)例13.4以下是在記錄集中添加一條新記錄的示例。<%RS.AddNewRS("SNumber")="98082210"RS("SName")="張紅"RS("SSex")="女"RS("出生日期")=Cdate("1980-2-10")RS("地址")="白頤路20號(hào)"RS("郵政編碼")="100080"RS("入學(xué)成績(jī)")=480RS.Update%>例13.4以下是在記錄集中添加一條新記錄的示例。3.刪除記錄 Recordset提供了刪除對(duì)象的方法。 Recordset對(duì)象的Delete方法的作用是刪除當(dāng)前記錄指針?biāo)赶虻挠涗洠? <% Rs.Delete %>3.刪除記錄13.3.3Recordset對(duì)象的主要屬性 1.AbsolutePage屬性 AbsolutePage屬性可以返回當(dāng)前記錄所在頁(yè)的絕對(duì)頁(yè)號(hào),也可以指定當(dāng)前記錄應(yīng)該放置在哪頁(yè)。13.3.3Recordset對(duì)象的主要屬性 2.AbsolutePosition屬性 當(dāng)前記錄指針的絕對(duì)位置。在正常情況下,其值在1-RecordCount(Recordset對(duì)象中記錄的個(gè)數(shù))之間,或是常數(shù)值。在Recordset內(nèi),第一條記錄對(duì)應(yīng)的AbsolutePosition值為1;最后一條記錄的AbsolutePosition值為RecordCount。2.AbsolutePosition屬性3.ActiveConnection屬性
ActiveConnection屬性是包含連接信息的連接字符串,包括數(shù)據(jù)源、用戶名、口令等。如果已經(jīng)建立了連接,通過(guò)ActiveConnection屬性,Recordset對(duì)象和Command對(duì)象能夠與Connection對(duì)象建立關(guān)聯(lián)。我們可以通過(guò)ActiveConnection屬性使Connection對(duì)象和Recordset對(duì)象建立關(guān)聯(lián)。我們還可以通過(guò)ActiveConnection屬性讀取與當(dāng)前數(shù)據(jù)庫(kù)的連接有關(guān)的參數(shù)。3.ActiveConnection屬性4.BOF屬性 BOF屬性檢查、判明當(dāng)前記錄指針是否在第一條記錄之前,并返回檢查的結(jié)果。如果當(dāng)前記錄指針已經(jīng)移到第一條記錄之前,BOF為真;否則為假。一般情況下,在向前移動(dòng)記錄指針時(shí),通過(guò)檢測(cè)BOF的值,可以判斷是否已經(jīng)到達(dá)第一條記錄之前。4.BOF屬性5.CursorLocation屬性 Cursor稱(chēng)為游標(biāo)。CursorLocation屬性用于選擇所使用的游標(biāo)庫(kù)。當(dāng)CursorLocation的值為2,其常數(shù)定義為adUseServer,表示使用服務(wù)器端的游標(biāo)庫(kù)。當(dāng)CursorLocation的值為1,其常數(shù)定義為adUseClient,表示使用客戶端的游標(biāo)庫(kù)。5.CursorLocation屬性6.CursorType屬性 在使用Recordset讀取數(shù)據(jù)時(shí)涉及到使用記錄指針。不同類(lèi)型的記錄指針具有不同的指針移動(dòng)方式。在打開(kāi)Recordset時(shí),需要指定記錄指針的類(lèi)型,即CursorType屬性。系統(tǒng)提供了四種CursorType值,其含義和屬性值見(jiàn)表13-2。6.CursorType屬性第13章使用ADO訪問(wèn)數(shù)據(jù)庫(kù)課件7.EditMode屬性 EditMode屬性能夠返回Recordset對(duì)象當(dāng)前的編輯模式:0表示目前處理的Recordset中沒(méi)有任何編輯操作;1表示正在進(jìn)行編輯操作,但是尚未保存到數(shù)據(jù)庫(kù)中;2表示正在增加記錄,但是尚未保存到數(shù)據(jù)庫(kù)中;4表示當(dāng)前記錄被刪除。7.EditMode屬性8.EOF屬性 EOF屬性用于判斷記錄指針是否到達(dá)Recordset的末尾。當(dāng)EOF的值為T(mén)rue,表示記錄指針位于最后一條記錄之后。9.Filter屬性 Filter屬性可以在Recordset對(duì)象中設(shè)置對(duì)數(shù)據(jù)的篩選條件,使被過(guò)濾出來(lái)的Recordset成為當(dāng)前Recordset。8.EOF屬性10.LockType屬性 LockType屬性用于設(shè)置當(dāng)前記錄的鎖定方式,以確定是否可以將記錄寫(xiě)入數(shù)據(jù)庫(kù)。11.MaxRecords屬性 MaxRecords屬性用于設(shè)置從數(shù)據(jù)源一次返回的最大記錄數(shù)。MaxRecords屬性的默認(rèn)值為0,表示返回所有記錄。10.LockType屬性12.PageCount屬性 PageCount屬性指明當(dāng)前Recordset對(duì)象所包含的頁(yè)數(shù)。每一頁(yè)包括一組記錄,其記錄的數(shù)量由PageSize屬性設(shè)置。13.PageSize屬性 當(dāng)Recordset對(duì)象設(shè)置了分頁(yè),使用PageSize屬性設(shè)置每頁(yè)的記錄數(shù)。PageSize屬性的默認(rèn)值為10,即每一頁(yè)有10條記錄。12.PageCount屬性14.RecordCount屬性 使用RecordCount屬性能夠確定Recordset中有多少條記錄。如果ADO無(wú)法判斷記錄總數(shù),則返回-1。需要說(shuō)明的是如果Recordset以adOpenForwardOnly方式打開(kāi),則RecordCount屬性不起作用。14.RecordCount屬性15.Source屬性 Source屬性指明Recordset對(duì)象的數(shù)據(jù)來(lái)源。16.State屬性 State屬性可以返回Recordset對(duì)象的狀態(tài)。15.Source屬性17.Status屬性 Status屬性能夠返回記錄處理是否成功的信息。13.3.4Recordset的主要方法1.Open方法 Open方法的完整格式如下。對(duì)象變量.OpenSource,Connection,CursorType,LockType,Type17.Status屬性 Open方法中各項(xiàng)參數(shù)的含義如下。 “Source”是一個(gè)字符串。指明要從數(shù)據(jù)庫(kù)中選取的數(shù)據(jù)。數(shù)據(jù)源可以是Command對(duì)象、SQL語(yǔ)句、存儲(chǔ)過(guò)程、表名或文件的全路徑。 Open方法中各項(xiàng)參數(shù)的含義如下。 Connection表示數(shù)據(jù)庫(kù)連接的名稱(chēng)。可以使用三種方式表達(dá)所要連接的數(shù)據(jù)庫(kù)。第一種方式是直接使用已經(jīng)建立連接的Connection對(duì)象變量;第二種方式使用連接參數(shù)字符串;第三種方式使用ODBC數(shù)據(jù)源名稱(chēng)。連接參數(shù)可以通過(guò)Recordset對(duì)象的ConnectionString屬性設(shè)置。
Connection表示數(shù)據(jù)庫(kù)連接的名稱(chēng)??梢允褂? CursorType指明Recordset對(duì)象打開(kāi)數(shù)據(jù)庫(kù)時(shí)所使用的記錄指針類(lèi)型。 LockType是可選參數(shù),它確定了打開(kāi)Recordset對(duì)象時(shí)的鎖定類(lèi)型。
Type是可選參數(shù),用于指定打開(kāi)Recordset對(duì)象時(shí)對(duì)應(yīng)的Command對(duì)象的CommandType類(lèi)型。 CursorType指明Recordset對(duì)象打開(kāi)2.Close方法 Close方法的作用是關(guān)閉一個(gè)Recordset對(duì)象,釋放相關(guān)的數(shù)據(jù),即為這個(gè)Recordset所申請(qǐng)的資源。使用Close方法不能將Recordset對(duì)象從內(nèi)存中清除。 釋放對(duì)象變量的命令如下。Set<對(duì)象名>=nothing2.Close方法3.Update方法 Update方法的功能是將Recordset對(duì)象中當(dāng)前記錄保存到數(shù)據(jù)庫(kù)中。4.AddNew方法 AddNew方法的作用是在Recordset對(duì)象中添加一條記錄。AddNew方法的語(yǔ)法格式如下。Recoreset.AddNewFieldList,Values3.Update方法 其中FieldList是一個(gè)字段或字段數(shù)組的名稱(chēng);Values是相應(yīng)的一個(gè)字段值或用數(shù)組表示的字段值。FieldList和Values都是可選參數(shù)。如果使用沒(méi)有參數(shù)的AddNew方法,則在Recordset中插入一個(gè)空白記錄。 其中FieldList是一個(gè)字段或字段數(shù)組的名稱(chēng);Val 使用AddNew方法向Recordset中添加記錄的方法有兩種:一種方法是在Recordset中添加一個(gè)空白記錄,再向這個(gè)空白記錄的字段中輸入數(shù)據(jù);另一種方法是先為數(shù)組賦值,再使用AddNew方法將數(shù)組中的數(shù)據(jù)添加到Recordset中。需要特別注意的是使用AddNew方法添加到Recordset中的數(shù)據(jù)并沒(méi)有保存到數(shù)據(jù)庫(kù)中,必須使用Update方法才能真正將Recordset中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。 使用AddNew方法向Recordset中添加記錄的方法5.Delete方法 使用Delete方法能夠刪除Recordset對(duì)象中一條或多條記錄。Delete方法的語(yǔ)法格式如下。Records
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧冶金職業(yè)技術(shù)學(xué)院《酒店人力資源管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西洪州職業(yè)學(xué)院《教師課堂教學(xué)藝術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林職業(yè)技術(shù)學(xué)院《財(cái)經(jīng)法規(guī)與會(huì)計(jì)職業(yè)道德》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南電子科技職業(yè)學(xué)院《后期合成A》2023-2024學(xué)年第一學(xué)期期末試卷
- 黑龍江司法警官職業(yè)學(xué)院《電路理論A》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶應(yīng)用技術(shù)職業(yè)學(xué)院《當(dāng)代社會(huì)思潮評(píng)析》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶機(jī)電職業(yè)技術(shù)大學(xué)《影像設(shè)備學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江農(nóng)林大學(xué)暨陽(yáng)學(xué)院《版式設(shè)計(jì)與表現(xiàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國(guó)石油大學(xué)(北京)《畫(huà)法幾何與機(jī)械制圖I》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州升達(dá)經(jīng)貿(mào)管理學(xué)院《金融法》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年高標(biāo)準(zhǔn)農(nóng)田建設(shè)土地承包服務(wù)協(xié)議3篇
- 閱讀理解(專(zhuān)項(xiàng)訓(xùn)練)-2024-2025學(xué)年湘少版英語(yǔ)六年級(jí)上冊(cè)
- 無(wú)創(chuàng)通氣基本模式
- 飛行原理(第二版) 課件 第4章 飛機(jī)的平衡、穩(wěn)定性和操縱性
- 暨南大學(xué)珠海校區(qū)財(cái)務(wù)辦招考財(cái)務(wù)工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 羊水少治療護(hù)理查房
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- OQC培訓(xùn)資料教學(xué)課件
- 2024年8月CCAA國(guó)家注冊(cè)審核員OHSMS職業(yè)健康安全管理體系基礎(chǔ)知識(shí)考試題目含解析
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
評(píng)論
0/150
提交評(píng)論