




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章ASP存取數(shù)據(jù)【本章內(nèi)容】9.1ADO概述9.2Connection對(duì)象9.3Command對(duì)象9.4Recordset對(duì)象19.1
ADO對(duì)象概述ASP應(yīng)用程序不能直接訪問(wèn)數(shù)據(jù)庫(kù),必須通過(guò)ADO(ActiveXDataObject),才可以訪問(wèn)Oracle、Sybase、SQLServer、Access等各種支持ODBC或者OLEDB的數(shù)據(jù)庫(kù)。ASP與ADO、OLEDB及各種數(shù)據(jù)庫(kù)之間的關(guān)系如圖8-7所示。ASP應(yīng)用程序ADOOLEDBODBCSQLServerAccess其他數(shù)據(jù)庫(kù)圖8-72對(duì)數(shù)據(jù)庫(kù)的操作有三大步驟與數(shù)據(jù)庫(kù)建立連接對(duì)已建立連接的數(shù)據(jù)庫(kù)執(zhí)行命令操作獲得執(zhí)行SQL語(yǔ)句的返回結(jié)果并對(duì)其進(jìn)行操作。ADO中與這三個(gè)步驟相對(duì)應(yīng)的有三個(gè)主要對(duì)象,分別是Connection對(duì)象、Command對(duì)象和Recordset對(duì)象。39.1
ADO概述1、ADO主要對(duì)象及其功能對(duì)象功能說(shuō)明Connection建立與數(shù)據(jù)庫(kù)的連接,對(duì)任何數(shù)據(jù)庫(kù)的操作都要有此對(duì)象Command對(duì)數(shù)據(jù)庫(kù)執(zhí)行的命令,如查詢、添加、修改和刪除等命令Recordset用來(lái)得到從數(shù)據(jù)庫(kù)返回的記錄集49.1
ADO概述2、ADO的這三個(gè)對(duì)象分別有一個(gè)對(duì)象的集合,以便在三個(gè)操作步驟中出現(xiàn)特殊情況或有特殊操作要求時(shí)進(jìn)行處理。Connection對(duì)象Command對(duì)象Recordset對(duì)象Fields集合Parameters集合Errors集合5Connection對(duì)象Connection對(duì)象是ASP應(yīng)用程序與數(shù)據(jù)庫(kù)建立連接的對(duì)象。在某些情況下,可以不顯式創(chuàng)建一個(gè)Connection對(duì)象,ADO將會(huì)隱含地創(chuàng)建一個(gè)Connection對(duì)象以連接到數(shù)據(jù)庫(kù)。除了與數(shù)據(jù)庫(kù)建立連接外,Connection對(duì)象還可以對(duì)數(shù)據(jù)庫(kù)執(zhí)行命令操作(例如,SQL命令或一個(gè)存儲(chǔ)過(guò)程),并且可以從數(shù)據(jù)庫(kù)中返回?cái)?shù)據(jù)。6Command對(duì)象Command對(duì)象是對(duì)數(shù)據(jù)庫(kù)執(zhí)行命令操作的對(duì)象。Connection對(duì)象也能對(duì)數(shù)據(jù)庫(kù)執(zhí)行命令操作。實(shí)際上,當(dāng)從Connection對(duì)象中運(yùn)行一條命令時(shí),已經(jīng)隱含地創(chuàng)建了一個(gè)Command對(duì)象。Connection對(duì)象在處理命令的功能上受到一定的限制,而Command對(duì)象則是專門用來(lái)處理命令的對(duì)象。有時(shí),其他對(duì)象會(huì)向命令語(yǔ)句傳入?yún)?shù)。Connection對(duì)象中不能進(jìn)行這樣的處理,而Command對(duì)象則可以指定參數(shù)。除此之外,Command對(duì)象還可得到由命令提供的一些附加信息。7Recordset對(duì)象Recordset對(duì)象是保存從數(shù)據(jù)庫(kù)中提取的一系列記錄的對(duì)象,被稱為記錄集對(duì)象。由于它含有從數(shù)據(jù)庫(kù)中提取的記錄,因而是ADO中使用最為普遍的對(duì)象。盡管會(huì)運(yùn)行不返回?cái)?shù)據(jù)的命令,比如增加或更新數(shù)據(jù)的命令,但在多數(shù)情況下會(huì)運(yùn)行返回?cái)?shù)據(jù)的命令,會(huì)獲得一系列記錄。可以更改(增加、更新和刪除)Recordset對(duì)象中的記錄、過(guò)濾記錄并只顯示部分內(nèi)容等。還可以使用Recordset對(duì)象對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行更改(增加、更新和刪除)。89.2Connection對(duì)象使用Connection對(duì)象建立與數(shù)據(jù)庫(kù)連接的方式主要有以下兩種:使用ODBC數(shù)據(jù)源的方式使用連接字符串的方式9使用ODBC數(shù)據(jù)源連接在“控制面板”的“管理工具”中選擇“數(shù)據(jù)源(ODBC)”。1011<%optionexplicitdimconn,strsql,myrecordsetsetconn=server.createobject("adodb.connection")conn.open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")strsql="select*fromempinfo"setmyrecordset=conn.execute(strsql)%><tableborder="1"align="center"><tr><td>職工工號(hào)</td>…</tr><%dowhilenotmyrecordset.eof %> <tr><td><%=myrecordset("empid")%></td> …</tr> <%
myrecordset.movenextLoopmyrecordset.closeconn.closesetmyrecordset=nothingsetconn=nothing%>129_1.asp13使用連接字符串連接連接字符串的一般寫法是: “driver={MicrosoftAccessDriver(*.mdb)};dbq=c:\myweb\ch09\companydb.mdb"為了方便ASP應(yīng)用程序的移植,不采取直接使用數(shù)據(jù)庫(kù)文件物理路徑的做法,而是使用Server對(duì)象的Mappath方法將數(shù)據(jù)庫(kù)文件的相對(duì)路徑轉(zhuǎn)換為物理路徑,即連接字符串改寫為: "driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")還可以采取下面的這種寫法: "Provider=Microsoft.Jet.OLEDB.4.0;dataSource="&server.mappath("companydb.mdb")14使用包含文件使用包含文件本質(zhì)上是一種使用連接字符串建立連接或使用ODBC數(shù)據(jù)源方式連接數(shù)據(jù)庫(kù)的方法。在一個(gè)ASP應(yīng)用程序中會(huì)包含許多對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的ASP頁(yè)面,每一個(gè)這樣的ASP頁(yè)面都需要有連接字符串提供連接信息。一旦ASP應(yīng)用程序的數(shù)據(jù)連接發(fā)生改變,則每個(gè)ASP頁(yè)面中的連接字符串都需要修改,使得維護(hù)工作量大且易出錯(cuò)。使用包含連接字符串的包含文件來(lái)存儲(chǔ)許多ASP頁(yè)面需要的連接字符串。實(shí)現(xiàn)很簡(jiǎn)單,只需要?jiǎng)?chuàng)建一個(gè)新的ASP文件,文件名沒(méi)有限定,為了便于識(shí)別,不妨稱為Connection.asp,在其中加入連接字符串的代碼。15Connection.asp====================================<%dimstrconnstrconn="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")%>169_2.asp===========================================<%optionexplicit%><!--#includefile="connection.asp"-->…<%dimconnsetconn=Server.CreateObject("ADODB.Connection")conn.open
strconndimstrsql,myrecordsetstrsql="select*fromempinfo"setmyrecordset=conn.execute(strsql)%><tableborder="1"align="center">…<%dowhilenotmyrecordset.eof %> <tr><td><%=myrecordset("empid")%></td> …</tr> <%
myrecordset.movenextloopmyrecordset.closeconn.closesetmyrecordset=nothingsetconn=nothing%>…179.2Connection對(duì)象Connection對(duì)象的常用屬性屬性功能說(shuō)明CommandTimeout設(shè)置Connection對(duì)象的Execute方法的最長(zhǎng)執(zhí)行時(shí)間,默認(rèn)值為30秒ConnectionString指定Connection對(duì)象的數(shù)據(jù)庫(kù)連接信息ConnectionTimeOutOpen方法與數(shù)據(jù)庫(kù)連接的最長(zhǎng)時(shí)間,默認(rèn)值為15秒DefaultDatebase在提供了多個(gè)數(shù)據(jù)庫(kù)時(shí),用該屬性指定默認(rèn)的數(shù)據(jù)庫(kù)Mode設(shè)置連接數(shù)據(jù)庫(kù)的讀寫權(quán)限provider設(shè)置連接的數(shù)據(jù)庫(kù)管理程序State獲取當(dāng)前鏈接對(duì)象的狀態(tài),0表示關(guān)閉,1表示打開(kāi)Attributes用于控制事務(wù)處理的行為Version顯示ADO的版本信息18Connection對(duì)象常用屬性介紹CommandTimeout屬性:用于設(shè)定使用Connection對(duì)象的Execute方法執(zhí)行一條SQL命令的最長(zhǎng)時(shí)限。如果執(zhí)行SQL命令超時(shí),將中斷操作并返回錯(cuò)誤信息。該屬性的默認(rèn)值為30秒,設(shè)定為0表示沒(méi)有時(shí)間限制。ConnectionTimeout屬性:用于設(shè)定使用Connection對(duì)象的Open方法建立數(shù)據(jù)連接的最長(zhǎng)時(shí)限。默認(rèn)值為15秒。如果將該屬性設(shè)置為0,ADO將無(wú)限等待直到數(shù)據(jù)連接打開(kāi)。ConnectionString屬性:用于設(shè)定使用Connection對(duì)象建立數(shù)據(jù)連接所需的信息,即設(shè)置連接字符串。19Connection對(duì)象常用屬性介紹<%DimconnDimstrconnstrconn="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")Setconn=server.createobject(“ADODB.connection”)Conn.open
strconn%>====================================<%DimconnSetconn=server.createobject(“ADODB.connection”)Conn.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")Conn.open%>20Connection對(duì)象常用屬性介紹Mode屬性:用于設(shè)定建立數(shù)據(jù)庫(kù)連接后,對(duì)該數(shù)據(jù)庫(kù)的操作權(quán)限。DefaultDatabase屬性:當(dāng)一個(gè)數(shù)據(jù)提供者提供多個(gè)數(shù)據(jù)庫(kù)時(shí),設(shè)定默認(rèn)數(shù)據(jù)庫(kù)。也可用于獲得當(dāng)前連接的數(shù)據(jù)庫(kù)的默認(rèn)名稱。符號(hào)常量整數(shù)值權(quán)限adModeUnkown0未指定權(quán)限adModeRead1只可對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀操作adModeWrite2只可對(duì)數(shù)據(jù)庫(kù)進(jìn)行寫操作adModeReadWrite3可對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀操作和寫操作219.2Connection對(duì)象
4、Connection對(duì)象的常用方法方法功能說(shuō)明Open建立與數(shù)據(jù)庫(kù)的連接Close關(guān)閉與數(shù)據(jù)庫(kù)的連接,與Open方法的作用相反Execute執(zhí)行數(shù)據(jù)庫(kù)查詢或操作命令BeginTrans開(kāi)始一個(gè)新的事務(wù)CommitTrans提交事務(wù)RollbackTrans回滾事務(wù)229.2Connection對(duì)象使用Connection對(duì)象之前要先建立Connection對(duì)象,在ADO中建立對(duì)象使用Server.CreateObject方法。語(yǔ)法為: SetConnection對(duì)象名=Server.CreateObject("ADODB.Connection")建立對(duì)象后才可以利用Connection對(duì)象的Open方法打開(kāi)數(shù)據(jù)庫(kù)并與之建立連接,語(yǔ)法如下:Connection對(duì)象名.OpenConnectionString,UserID,Password
其中ConnectionString為一個(gè)字符串:“參數(shù)1=值1;參數(shù)2=值2;……”239.2Connection對(duì)象1、Connection對(duì)象Open方法的參數(shù)參數(shù)功能說(shuō)明DsnODBC數(shù)據(jù)源名稱User數(shù)據(jù)庫(kù)登錄帳號(hào)Password數(shù)據(jù)庫(kù)登錄密碼Driver數(shù)據(jù)庫(kù)的類型(驅(qū)動(dòng)程序)Dbq數(shù)據(jù)庫(kù)的絕對(duì)路徑Provider數(shù)據(jù)提供者24數(shù)據(jù)庫(kù)種類ODBC驅(qū)動(dòng)程序名稱MSAccessDatabaseMicrosoftAccessDriver(*.mdb)DBASEFilesMicrosoftdBaseDriver(*.dbf)VisualFoxProDatabaseMicrosoftVisualFoxProDriver文本文件MicrosoftTextDriver(*.txt)MicrosoftSQLServerSQLServerOracleDatabaseServerMicrosoftODBCForOracleMicrosoftFoxProMicrosoftFoxProDriver(*.dbf)表11-1常用的ODBC驅(qū)動(dòng)程序設(shè)置字符串25Close方法 關(guān)閉數(shù)據(jù)源的連接,釋放連接占用的資源。Execute方法 用來(lái)執(zhí)行一個(gè)SQL語(yǔ)句命令或一個(gè)存儲(chǔ)過(guò)程。在使用時(shí)分為如下兩種情況。有返回記錄時(shí)的語(yǔ)法格式:Setrs=conn.Execute
commandtext,recordsaffected,options無(wú)返回記錄時(shí)的語(yǔ)法格式:Conn.Execute
commandtext,recordsAffected,options26Commandtext是執(zhí)行的命令文本??梢允菙?shù)據(jù)庫(kù)中的表名、存儲(chǔ)過(guò)程和SQL語(yǔ)句命令。recordsAffected為可選參數(shù),返回受此次命令執(zhí)行影響的記錄條數(shù)。Options為可選參數(shù),是命令選項(xiàng)。Option值意義描述1表示被執(zhí)行的字符串包含一個(gè)命令文本2表示被執(zhí)行的字符串包含一個(gè)表名4表示被執(zhí)行的字符串包含一個(gè)存儲(chǔ)過(guò)程名8沒(méi)有指定字符串的內(nèi)容(這是默認(rèn)值)27<%optionexplicit%>…<%dimconnsetconn=server.createobject("adodb.connection")conn.open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")dimmyrecordset,recordscountsetmyrecordset=conn.execute("find",4)%><tableborder="1"align="center"><tr><td>職工工號(hào)</td>…</tr><%dowhilenotmyrecordset.eof %> <tr><td><%=myrecordset("empid")%></td> …</tr> <%
myrecordset.movenextloopmyrecordset.closeconn.closesetmyrecordset=nothingsetconn=nothing%>…2829Errors集合與Error對(duì)象在ASP應(yīng)用程序中,與ADO對(duì)象相關(guān)的操作都有可能產(chǎn)生一個(gè)或多個(gè)錯(cuò)誤,一個(gè)錯(cuò)誤就是一個(gè)Error對(duì)象。隨著錯(cuò)誤的產(chǎn)生,一個(gè)或多個(gè)Error對(duì)象被放在Connection對(duì)象的Errors集合中。當(dāng)另一個(gè)ADO對(duì)象操作產(chǎn)生錯(cuò)誤時(shí),Errors集合被清空,新的Error對(duì)象集被放在Errors集合中。30Errors集合的屬性和方法Count屬性:唯一的一個(gè)屬性,返回Errors集合中Error對(duì)象的數(shù)目。
connection對(duì)象.Errors.countClear方法:用來(lái)清除Errors集合中的原有Error對(duì)象,通常在統(tǒng)計(jì)新Error對(duì)象之前先使用此方法。
connection對(duì)象.Errors.clearItem方法:用來(lái)對(duì)指定的一個(gè)錯(cuò)誤建立Error對(duì)象。
setError對(duì)象=connection對(duì)象.Errors.Item(錯(cuò)誤索引)31Error對(duì)象的屬性Error對(duì)象的屬性用以獲取關(guān)于錯(cuò)誤的詳細(xì)信息,如什么樣的錯(cuò)誤,可能的原因等。Description屬性:關(guān)于錯(cuò)誤的描述,是一個(gè)默認(rèn)屬性。Number屬性:對(duì)錯(cuò)誤的編號(hào),是一個(gè)Long型的整數(shù)常量值。Source屬性:記錄產(chǎn)生錯(cuò)誤的對(duì)象和原因。NativeError屬性:記錄來(lái)自數(shù)據(jù)庫(kù)服務(wù)器的錯(cuò)誤信息。HelpContext屬性:返回幫助系統(tǒng)的標(biāo)題ID。HelpFile屬性:返回幫助系統(tǒng)中幫助文件的完整路徑。329_4.asp33<%optionexplicit%><html><head><title>Errors集合與Error對(duì)象</title></head><body><h2align="center">錯(cuò)誤對(duì)象的信息</h2><%onerrorresumenext'發(fā)生錯(cuò)誤后繼續(xù)執(zhí)行dimconnsetconn=server.createobject("adodb.connection")conn.open"dsn=employeeee"'一個(gè)錯(cuò)誤的數(shù)據(jù)源dimi,errfori=0toconn.errors.count-1 seterr=conn.errors.item(i)
response.write"錯(cuò)誤編號(hào):"&err.number&"<br>"
response.write"錯(cuò)誤原因:"&err.source&"<br>"
response.write"錯(cuò)誤描述:"&err.description&"<br>"next%></body></html>34事務(wù)處理一個(gè)事務(wù)作為一個(gè)整體由一系列操作組成。事務(wù)的成功要求事務(wù)中的每個(gè)操作都必須成功。如果事務(wù)中有一個(gè)操作失敗,則整個(gè)事務(wù)失敗。當(dāng)事務(wù)失敗時(shí),系統(tǒng)返回到事務(wù)開(kāi)始前的狀態(tài)。這個(gè)取消所有變化的過(guò)程稱為回滾。ADO中的Connection對(duì)象提供了BeginTrans方法、CommitTrans方法和RollbackTrans方法實(shí)現(xiàn)事務(wù)處理。BeginTrans方法用于開(kāi)始一個(gè)新的事務(wù),即在內(nèi)存中為事務(wù)開(kāi)辟一片內(nèi)存緩沖區(qū)。事務(wù)中的每個(gè)操作對(duì)數(shù)據(jù)的修改都暫存于內(nèi)存緩沖區(qū)。35CommitTrans方法提交事務(wù)。在使用這個(gè)方法之前,須確認(rèn)事務(wù)中的每個(gè)操作對(duì)數(shù)據(jù)的修改都已成功完成。使用CommitTrans方法將事務(wù)中所有變動(dòng)的數(shù)據(jù)從內(nèi)存緩沖區(qū)一次性地保存到數(shù)據(jù)庫(kù)中,結(jié)束當(dāng)前事務(wù)。RollbackTrans方法用于取消當(dāng)前的事務(wù),也就是取消緩沖區(qū)中的數(shù)據(jù),當(dāng)事務(wù)中的某個(gè)操作失敗時(shí),則取消緩沖區(qū)中的所有數(shù)據(jù),不把數(shù)據(jù)修改保存到數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)中的數(shù)據(jù)仍然處于事務(wù)開(kāi)始前的狀態(tài)。369_5.asp37<%optionexplicit%>…<%onerrorresumenext'發(fā)生錯(cuò)誤后繼續(xù)執(zhí)行dimconn,strconn,strsqlstrconn="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")setconn=server.createobject("adodb.connection")conn.open
strconnconn.begintransstrsql="updatebank_accountsetbalance=balance-10000.00wherename='孫亮'"conn.execute(strsql)ifconn.errors.count=0then
mittrans
response.write"轉(zhuǎn)賬操作已成功完成!"else
conn.rollbacktrans
response.write"有錯(cuò)誤發(fā)生,轉(zhuǎn)賬操作取消!"endifconn.closesetconn=nothing%>…389.3Command對(duì)象Command對(duì)象是介于Connection對(duì)象和Recordset對(duì)象之間的一個(gè)對(duì)象,它主要通過(guò)傳遞SQL指令,對(duì)數(shù)據(jù)庫(kù)提出操作請(qǐng)求,把得到的結(jié)果返回給Recordset對(duì)象。Command對(duì)象建立在Connection對(duì)象之上,也就是說(shuō)Command對(duì)象必須有一個(gè)已經(jīng)建立的Connection對(duì)象才能發(fā)出SQL指令。用Command對(duì)象的參數(shù)與非參數(shù)查詢方法可以大大的提高速度。399_6.asp40…<%dimconnsetconn=server.createobject("adodb.connection")conn.open"employee"dimcmd,myrecordsetsetcmd=server.createobject("mand")cmd.activeconnection=connmandtext="select*fromempinfo"setmyrecordset=cmd.execute%><tableborder="1"align="center"><tr><td>職工工號(hào)</td>…</tr><%dowhilenotmyrecordset.eof%><tr><td><%=myrecordset("empid")%></td>…</tr><%myrecordset.movenextloopmyrecordset.closeconn.closesetmyrecordset=nothingsetconn=nothing%>…41首先創(chuàng)建connection對(duì)象并建立數(shù)據(jù)連接。創(chuàng)建command對(duì)象實(shí)例后,設(shè)置其activeconnection屬性確定其相關(guān)的數(shù)據(jù)連接,設(shè)置其commandtext屬性確定執(zhí)行操作命令的文本。最后調(diào)用其Execute方法對(duì)連接的數(shù)據(jù)庫(kù)執(zhí)行操作命令。DimcmdSetcmd=server.createobject(“ADODB.Command”)cmd.ActiveConnection=“employee”42ActiveConnection屬性:用于指定command對(duì)象的相關(guān)數(shù)據(jù)連接。可以連接connection對(duì)象,數(shù)據(jù)源名,連接字符串。CommandType屬性:指定commandtext屬性中命令的類型以優(yōu)化性能。該屬性取值如下表。屬性說(shuō)明Activeconnection該屬性指定command對(duì)象的數(shù)據(jù)連接Commandtype該屬性指定命令類型Commandtext該屬性定義命令文本Commandtimeout該屬性指定命令的時(shí)間限制。默認(rèn)值為30秒prepared該屬性指示命令執(zhí)行前是否對(duì)命令作預(yù)處理43CommandText屬性:用于定義命令文本。如SQL語(yǔ)句,表名,存儲(chǔ)過(guò)程調(diào)用。默認(rèn)值為“”(零長(zhǎng)度字符串)符號(hào)常量整數(shù)值說(shuō)明adCmdTest1表示是一個(gè)SQL語(yǔ)句adCmdTable2表示是一個(gè)表adCmdStoredProc4表示是一個(gè)存儲(chǔ)過(guò)程或查詢名adCmdUnknow8表示不能識(shí)別,它是默認(rèn)值44CommandTimeout屬性:指定執(zhí)行命令的時(shí)間限制,即指示執(zhí)行命令期間在終止嘗試和產(chǎn)生錯(cuò)誤之前需等待的時(shí)間。該屬性常用于因網(wǎng)絡(luò)擁擠或服務(wù)器負(fù)載過(guò)重產(chǎn)生遲延而取消execute方法調(diào)用,默認(rèn)值為30秒。如果將該屬性設(shè)置為零,ADO將一直等待到命令執(zhí)行完畢。Prepared屬性:指示命令執(zhí)行前是否對(duì)命令作預(yù)處理。如果將該屬性設(shè)為true,則會(huì)把操作命令的編譯結(jié)果保存下來(lái)。這可能會(huì)降低操作命令第一次執(zhí)行的速度,但一旦操作命令的編譯結(jié)果保存下來(lái)后,便可將命令的編譯版本用于所有后續(xù)的執(zhí)行中,從而提高操作命令執(zhí)行的速度,提高系統(tǒng)的性能。459_7.asp46…<%dimcmd,myrecordsetsetcmd=Server.CreateObject("ADODB.Command")cmd.Activeconnection="employee"mandtype=4mandtext="find"setmyrecordset=cmd.execute%><tableborder="1"align="center"><tr><td>職工工號(hào)</td>…</tr><%dowhilenotmyrecordset.eof%><tr><td><%=myrecordset("empid")%></td>…</tr><%myrecordset.movenextloopmyrecordset.closesetmyrecordset=nothing%>…47Command對(duì)象的常用方法Execute方法根據(jù)是否有返回記錄集,Execute方法常用的語(yǔ)法格式分為兩種:Setrecordset對(duì)象=command對(duì)象.executeCommand對(duì)象.execute48Execute方法有返回記錄集Setrecordset對(duì)象=command對(duì)象.executerecordsaffected,parameters,options無(wú)返回記錄集Command對(duì)象.executerecordsaffected,parameters,options其中,recordsaffected返回對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作所影響的記錄數(shù)目。Parameters為向SQL語(yǔ)句命令傳送的參數(shù)。Options指示commandtext中命令文本的類型。功能與commandtype屬性相同,取值也一樣。499_8.asp50<%optionexplicit%><html><head><title>Command對(duì)象示例</title></head><body><%dimcmd,recordcountsetcmd=server.createobject("mand")cmd.activeconnection="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb")mandtype=1mandtext="deletefromempinfowheresalary>5000"cmd.executerecordcount,,1response.write"已刪除"&recordcount&"條記錄。"%></table></body></html>51Parameter對(duì)象Parameter對(duì)象用于保存需要傳遞的參數(shù)的相關(guān)信息,如參數(shù)的名稱和參數(shù)的值等。Parameter對(duì)象將這些信息保存在自己的屬性中。Parameter對(duì)象常用屬性屬性說(shuō)明Name參數(shù)名稱Type參數(shù)的數(shù)據(jù)類型Value參數(shù)值Direction參數(shù)傳遞的方向Size參數(shù)占用存儲(chǔ)空間的大小attributes指定該參數(shù)的性質(zhì)52符號(hào)常量整數(shù)值數(shù)據(jù)類型adDate7表示日期值adInteger3表示4字節(jié)的帶符號(hào)整數(shù)adDecimal14具有固定精度和范圍的精確數(shù)字值adSingle4單精度浮點(diǎn)值adDouble5雙精度浮點(diǎn)值adVarChar200表示字符串值53符號(hào)常量整數(shù)值說(shuō)明adParamInput1為輸入?yún)?shù),即傳送數(shù)據(jù)給一個(gè)存儲(chǔ)過(guò)程(默認(rèn)值)adParamOutput2為輸出參數(shù),即接收從command對(duì)象執(zhí)行后的輸入值adParamInputOutput3輸入和輸出參數(shù),即傳送并接收數(shù)據(jù)adParamReturnValue4返回值,用來(lái)讀取從存儲(chǔ)過(guò)程返回的狀態(tài)值符號(hào)常量整數(shù)值說(shuō)明adParamSigned16允許為有符號(hào)的值(默認(rèn)值)adParamNullable64允許為NULL值adParamLong128允許為長(zhǎng)數(shù)據(jù)54Parameter對(duì)象的常用方法有一個(gè)AppendChunk。該方法用于向已有參數(shù)附加二進(jìn)制或字符數(shù)據(jù)。為了使用該方法,該parameter對(duì)象attributes屬性需設(shè)置為adParamLong。創(chuàng)建parameter對(duì)象的方法就是command對(duì)象的CreateParameter方法,CreateParameter方法的功能是用指定的名稱、類型、方向、大小和值創(chuàng)建新的parameter對(duì)象。語(yǔ)法格式如下:
setparameter對(duì)象=command對(duì)象.createparameter(name,type,direction,size,value)55Parameters集合只有一個(gè)屬性:count,該屬性存儲(chǔ)parameters集合中parameter對(duì)象的個(gè)數(shù)。Append方法:是parameter集合中較為常用的方法。其作用是將一個(gè)parameter對(duì)象加入到parameters集合中。Item方法:從parameters集合中取得指定的parameter對(duì)象。Delete方法:從parameters集合中刪除指定的parameter對(duì)象Refresh方法:刷新parameters集合中的parameter對(duì)象。569_9.html<html><head><title>parameters集合和parameter對(duì)象示例</title></head><body><formname="form1"method="post"action="9_9.asp">請(qǐng)輸入要查找的職工的工號(hào):<inputtype="text"name="empid"><inputtype="submit"value="確定"></form></body></html>57<%ifrequest.form("empid")<>""then dimpara_name,para_type,para_direction,para_size,para_value
para_name="para_empid"
para_type=200
para_direction=1
para_size=10
para_value=request.form("empid") dimcmd,param,myrecordset setcmd=server.createobject("mand")
cmd.activeconnection="driver={MicrosoftAccessDriver(*.mdb)};dbq="&server.mappath("companydb.mdb") setparam=cmd.createparameter(para_name,para_type,para_direction,para_size,para_value)
cmd.parameters.append
param
mandtype=4
mandtext="para_find" setmyrecordset=cmd.execute ifmyrecordset.eofthen
response.write"沒(méi)有滿足條件的記錄" else
response.write"檢索到下列記錄!"
response.write"<hr>" dowhilenotmyrecordset.eof
response.write"職工工號(hào):"&myrecordset("empid")&"<br>" …
response.write"<hr>"
myrecordset.movenext loop endifelse
response.write"輸入數(shù)據(jù)為空,請(qǐng)重新輸入!"endif%><p><ahref="9_9.html">重新查詢</a>589.4Recordset對(duì)象【本節(jié)內(nèi)容】9.4.1Recordset對(duì)象中記錄集的結(jié)構(gòu)9.4.2Recordset對(duì)象實(shí)例的創(chuàng)建9.4.3分頁(yè)顯示記錄集9.4.4使用Recordset對(duì)象更新數(shù)據(jù)庫(kù)9.4.5Fields集合和Field對(duì)象59記錄RecordCount…記錄4記錄3記錄2記錄1記錄指針當(dāng)前記錄MovePrevious方法移動(dòng)方向MoveNext方法移動(dòng)方向BofEof9.4.1Recordset對(duì)象中記錄集的結(jié)構(gòu)60Recordset對(duì)象的屬性1、Recordset對(duì)象常用屬性概述Recordset對(duì)象的常用屬性根據(jù)功能大致可以分成三組:第一組主要包括Source、ActiveConnection、CursorType、LockType、CursorLocation、Maxrecords
和Filter,用來(lái)限定記錄集的內(nèi)容和性質(zhì),它們通常需要在打開(kāi)記錄集(使用Open方法)前設(shè)置。
第二組主要包括RecordCount、Bof和Eof,它們是關(guān)于記錄的,一般只能在打開(kāi)記錄集后再讀取,而不能設(shè)置。第三組主要包括PageSize、PageCount、AbsolutePage和AbsolutePostion,用來(lái)完成數(shù)據(jù)分頁(yè)顯示的功能,它們通常在打開(kāi)記錄集后再設(shè)置。表十列出了Recordset對(duì)象的常用屬性。61屬性說(shuō)明SourceCommand對(duì)象名或SQL語(yǔ)句或數(shù)據(jù)表名ActiveConnectionConnection對(duì)象名或包含數(shù)據(jù)庫(kù)連接信息的字符串CursorTypeRecordset對(duì)象記錄集中的指針類型,取值見(jiàn)表七LockTypeRecordset對(duì)象鎖定類型,取值見(jiàn)表八Maxrecords控制從服務(wù)器取得的記錄集的最大記錄數(shù)目CursorLocation控制數(shù)據(jù)處理的位置,客戶端還是服務(wù)器端Filter控制欲顯示的內(nèi)容RecordCount記錄集總數(shù)Bof記錄集的開(kāi)頭Eof記錄集的結(jié)尾PageSize數(shù)據(jù)分頁(yè)顯示時(shí)每一頁(yè)的記錄數(shù)PageCount數(shù)據(jù)分頁(yè)顯示時(shí)數(shù)據(jù)頁(yè)的總數(shù)AbsolutePage當(dāng)前指針?biāo)诘臄?shù)據(jù)頁(yè)AbsolutePossition當(dāng)前指針?biāo)诘挠涗浶?2Recordset對(duì)象的屬性2、Recordset對(duì)象常用屬性的使用(1)Source該屬性用于設(shè)置數(shù)據(jù)庫(kù)查詢信息,可以是Command對(duì)象名、SQL語(yǔ)句或表名等。語(yǔ)法為:
Recordset對(duì)象.Source=數(shù)據(jù)庫(kù)查詢信息例如:<%dimrssetrs=Server.CreateObject("ADODB.Recordset")rs.Source="Select*fromUsers"response.Write
rs.Source%>63Recordset對(duì)象的屬性(2)ActiveConnection該屬性用于設(shè)置數(shù)據(jù)庫(kù)連接信息,可以是Connection對(duì)象名或包含數(shù)據(jù)庫(kù)連接信息的字符串。語(yǔ)法為:
Recordset對(duì)象.ActiveConnection=數(shù)據(jù)庫(kù)連接信息rs.ActiveConnection="Driver={MicrosoftAccessDriver(*.mdb)};Dbq="&Server.MapPath("data\BBS#.mdb")(3)CursorType該屬性用于設(shè)置記錄集指針類型,取值見(jiàn)表七,語(yǔ)法為:
Recordset對(duì)象.CursorType=取值(0|1|2|3)如不設(shè)置,默認(rèn)值是0,指針只能向前移動(dòng),要想指針可以自由前后移動(dòng),一般設(shè)為1或2。
64記錄集的指針類型CursorType參數(shù)取值取值含義AdOpenForwardOnly0向前指針,只能利用MoveNext或GetRows向前檢索數(shù)據(jù),默認(rèn)值A(chǔ)dOpenKeyset1鍵盤指針,在記錄集中可以向前或向后移動(dòng),當(dāng)某客戶做了修改之后(除出了增加新數(shù)據(jù)),其它用戶都可以立即顯示AdOpenDynamic2動(dòng)態(tài)指針,記錄集中可以向前或向后移動(dòng);所有修改都會(huì)立即在其它客戶端顯示AdOpenStatic3靜態(tài)指針,在記錄集中可以向前或向后移動(dòng),所有更新的數(shù)據(jù)都不會(huì)顯示在其他客戶端65Recordset對(duì)象的屬性(4)LockType該屬性用于設(shè)置記錄集的鎖定類型,取值見(jiàn)表八,語(yǔ)法為:
Recordset對(duì)象.LockType=取值(1|2|3|4)如不設(shè)置,默認(rèn)值是1,表示只能讀取。利用Recordset對(duì)象也可以執(zhí)行添加、刪除、更新等操作,不過(guò)這時(shí)就要設(shè)置該屬性,如一般時(shí)設(shè)置為2。下面通過(guò)改寫例1來(lái)說(shuō)明以上四屬性的使用。LockType參數(shù)取值取值含義AdLockReadOnly1只讀,不允許修改記錄集,默認(rèn)值A(chǔ)dLockPessimistic2只能同時(shí)被一個(gè)客戶修改,修改時(shí)鎖定,修改完解除鎖定AdLockOptimistic3可以同時(shí)被多個(gè)客戶修改AdLockBatchOptimistic4數(shù)據(jù)可以修改,但不鎖定其它用戶66Recordset對(duì)象的屬性(5)CursorLocation該屬性用于設(shè)置記錄集在客戶端還是在服務(wù)器處理。取值及說(shuō)明如表十一所示,語(yǔ)法為:
Recordset對(duì)象.CursorLocation=整數(shù)值(1|2|3)CursorLocation參數(shù)取值取值含義AdUseClient1在客戶端處理AdUseServer2在服務(wù)器端處理AdUseClientBatch3動(dòng)態(tài)處理,在客戶端處理,不過(guò)處理時(shí)要切斷連接,處理完畢再重新連接更新67Recordset對(duì)象的屬性(6)Filter該屬性用于設(shè)置欲顯示的內(nèi)容。取值及說(shuō)明如表十二,語(yǔ)法為:
Recordset對(duì)象.Filter=取值(0|1|2|3)表十二Filter參數(shù)取值說(shuō)明AdFilterNone0顯示所有數(shù)據(jù)AdFilterpendRecords1只顯示沒(méi)有修改過(guò)的數(shù)據(jù)AdFilterAffectedRecords2只顯示最近修改過(guò)的數(shù)據(jù)AdFilterFetchedRecords3只顯示暫存于客戶端緩存中的數(shù)據(jù)68Recordset對(duì)象的屬性(7)RecordCount
該屬性用于返回記錄集中的記錄總數(shù),語(yǔ)法為:
Recordset對(duì)象.RecordCount例8-7統(tǒng)計(jì)Users表中記錄總數(shù)69Recordset對(duì)象的屬性(8)Bof該屬性用于判斷當(dāng)前記錄指針是否在記錄集的開(kāi)頭(第一條記錄之前),在開(kāi)頭返回True,否則返回False。(9)Eof該屬性用于判斷當(dāng)前記錄指針是否在記錄集的結(jié)尾(最后一條記錄之后),在結(jié)尾則返回True,否則返回False。如果記錄集為空,可以認(rèn)為記錄集指針指在開(kāi)頭,也在結(jié)尾。Bof和Eof屬性的值都為True,常用此屬性來(lái)判斷記錄集是否為空。70Recordset對(duì)象的屬性例如:<%…..rs.Open……ifrs.Eofandrs.BofThen
response.write"沒(méi)有找到相關(guān)的記錄"……endif%>71Recordset對(duì)象的屬性(10)PageSize該屬性用于設(shè)置數(shù)據(jù)分頁(yè)時(shí)第一頁(yè)的記錄數(shù)。語(yǔ)法為:
Recordset對(duì)象.PageSize=整數(shù)(11)PageCount該屬性用于設(shè)置數(shù)據(jù)分頁(yè)顯示時(shí)數(shù)據(jù)頁(yè)的總數(shù)。語(yǔ)法為:
Recordset對(duì)象.PageCount72Recordset對(duì)象的屬性(12)AbsolutePage該屬性用于設(shè)置當(dāng)前指針位于哪一頁(yè)。語(yǔ)法為:
Recordset對(duì)象.AbsolutePage=整數(shù)該整數(shù)當(dāng)然應(yīng)該小于數(shù)據(jù)頁(yè)的總數(shù)(13)AbsolutePostion該屬性用于設(shè)置當(dāng)前指針?biāo)诘挠涗浶械慕^對(duì)值。語(yǔ)法為:
Recordset對(duì)象.AbsolutePostion=整數(shù)73Recordset對(duì)象的方法1、Recordset對(duì)象常用方法的概述Recordset對(duì)象有許多方法,這些方法提供了一些和記錄集相關(guān)的操作,按功能可將常用和方法分為兩組:第一組包括Open、Close和Requery,用于Recordset對(duì)象的打開(kāi)與關(guān)閉。第二組包括MoveFirst、MovePrevious、MoveNext、MoveLast和Move,用來(lái)移動(dòng)記錄指針。表十三列出了RecordSet對(duì)象的常用方法74Recordset對(duì)象的方法
方法說(shuō)明Open打開(kāi)記錄集Close關(guān)閉當(dāng)前的Recordset對(duì)象Requery重新打開(kāi)記錄集MoveFirst指針移動(dòng)到第一條記錄MovePrevious指針移動(dòng)到上一條記錄MoveNext指針移動(dòng)到下一條記錄MoveLast指針移動(dòng)到最后一條記錄Move指針移動(dòng)到指定記錄GetRows從Recordset對(duì)象讀取一行或多行記錄到一個(gè)數(shù)組中75Recordset對(duì)象的方法2、Recordset對(duì)象常用方法的使用(1)Open前面已經(jīng)介紹并多次使用過(guò)該方法,請(qǐng)參照8.5.1的內(nèi)容。(2)Close該方法用于關(guān)閉Recordset對(duì)象。語(yǔ)法為:
Recordset對(duì)象.Close和Connection對(duì)象的關(guān)閉方法一樣。(3)Requery該方法用于重新打開(kāi)記錄集,以更新內(nèi)容,相當(dāng)于關(guān)閉再打開(kāi)。語(yǔ)法為:
Recordset對(duì)象.Requery
(4)MoveFirst該方法用于將記錄指針移動(dòng)到第一條記錄。語(yǔ)法為:
Recordset對(duì)象.MoveFirst76Recordset對(duì)象的方法(5)MovePrevious該方法用于將記錄指針移動(dòng)到上一條記錄。語(yǔ)法為:
Recordset對(duì)象.MovePrevious(6)MoveNext該方法用于將記錄指針移動(dòng)到下一條記錄。語(yǔ)法為:
Recordset對(duì)象.MoveNext(7)MoveLast該方法用于將記錄指針移動(dòng)到最后一條記錄。語(yǔ)法為:
Recordset對(duì)象.MoveLast
77Recordset對(duì)象的方法(8)Move該方法用于將指針移動(dòng)到指定的記錄。語(yǔ)法為:
Recordset對(duì)象.Movenumber,start參數(shù)意義說(shuō)明:start:設(shè)置指針移動(dòng)的開(kāi)始位置,缺省值為當(dāng)前指針的位置。number:從start設(shè)置的起始位置向前或向后移動(dòng)number條記錄,如為正整數(shù),表示向下移動(dòng);如為負(fù)整數(shù),表示向上移動(dòng)。(9)GetRows
Myarray=Recordset對(duì)象.GetRows(rows,start,fields)
Myarray為目標(biāo)數(shù)組名;Rows為返回?cái)?shù)組的行數(shù);start為讀取數(shù)據(jù)的起點(diǎn);fields為Recordset的字段789.4.2Recordset對(duì)象實(shí)例的創(chuàng)建建立Recordset對(duì)象的標(biāo)準(zhǔn)語(yǔ)法是:SetRecordset對(duì)象=Server.CreateObject(“ADODB.Recordset”)建立了Recordset對(duì)象之后再使用Open方法打開(kāi)一個(gè)數(shù)據(jù)庫(kù),語(yǔ)法是:Setrs=Server.CreateObject(“ADODB.Recordset”)rs.Open[Source],[ActiveConnection],[CursorType],[LockType],[Options]79<%dimconn,cmd,myrecordsetsetconn=server.createobject("adodb.connection")conn.open"employee"setcmd=server.createobject("mand")cmd.activeconnection=connmandtext="select*fromempinfo"setmyrecordset=server.createobject("adodb.recordset")myrecordset.open
cmdifmyrecordset.eofthen
response.write"沒(méi)有記錄!"else
response.write"<hr>" dowhilenotmyrecordset.eof
response.write"職工工號(hào):"&myrecordset("empid")&"<br>"
response.write"職工姓名:"&myrecordset("name")&"<br>"
response.write"職工性別:"&myrecordset("sex")&"<br>"
response.write"職工年齡:"&myrecordset("age")&"<br>"
response.write"所在部門:"&myrecordset("dept")&"<br>"
response.write"<hr>"
myrecordset.movenext loopendif%>80819.4.2Recordset對(duì)象實(shí)例的創(chuàng)建1、
Recordset
對(duì)象Open方法的參數(shù)rs.Open[Source],[ActiveConnection],[CursorType],[LockType],[Options]參數(shù)意義說(shuō)明SourceCommand對(duì)象名或SQL語(yǔ)句或數(shù)據(jù)表名ActiveConnectionConnection對(duì)象名或包含數(shù)據(jù)庫(kù)連接信息的字符串CursorTypeRecordset對(duì)象記錄集中的指針類型,取值見(jiàn)表七,可以省略LockTypeRecordset對(duì)象的使用類型取值見(jiàn)表八,可以省略O(shè)ptionsSource類型,取值見(jiàn)表九,可以省略829.4.2Recordset對(duì)象實(shí)例的創(chuàng)建記錄集的指針類型:CursorType參數(shù)取值取值含義AdOpenForwardOnly0向前指針,只能利用MoveNext或GetRows向前檢索數(shù)據(jù),默認(rèn)值A(chǔ)dOpenKeyset1鍵盤指針,在記錄集中可以向前或向后移動(dòng),當(dāng)某客戶做了修改之后(除出了增加新數(shù)據(jù)),其它用戶都可以立即顯示AdOpenDynamic2動(dòng)態(tài)指針,記錄集中可以向前或向后移動(dòng);所有修改都會(huì)立即在其它客戶端顯示AdOpenStatic3靜態(tài)指針,在記錄集中可以向前或向后移動(dòng),所有更新的數(shù)據(jù)都不會(huì)顯示在其他客戶端839.4.2Recordset對(duì)象實(shí)例的創(chuàng)建記錄集的鎖定類型:LockType參數(shù)取值取值含義AdLockReadOnly1只讀,不允許修改記錄集,默認(rèn)值A(chǔ)dLockPessimistic2只能同時(shí)被一個(gè)客戶修改,修改時(shí)鎖定,修改完解除鎖定AdLockOptimistic3可以同時(shí)被多個(gè)客戶修改AdLockBatchOptimistic4數(shù)據(jù)可以修改,但不鎖定其它用戶849.4.2Recordset對(duì)象實(shí)例的創(chuàng)建Source參數(shù)的類型:Options參數(shù)取值取值含義AdCmdUnknown8CommandText參數(shù)類型無(wú)法確定,是系統(tǒng)的缺省值A(chǔ)dCmdText1CommandText參數(shù)是SQL命令類型AdCmdTable2CommandText參數(shù)是一個(gè)表名稱AdCmdStoreProc4CommandText參數(shù)是一個(gè)存儲(chǔ)過(guò)程名稱859.4.2Recordset對(duì)象實(shí)例的創(chuàng)建總的說(shuō)來(lái),Source是數(shù)據(jù)庫(kù)查詢信息;ActiveConnection是數(shù)據(jù)庫(kù)連接信息;CursorType是指針類型;LockType是鎖定信息;Options是數(shù)據(jù)庫(kù)查詢信息類型。在大部分情況下可以省略后3個(gè)參數(shù)使用。若在省略中間的某個(gè)參數(shù),必須用逗號(hào)給出中間參數(shù)的位置,也就是說(shuō),每一個(gè)參數(shù)必須對(duì)應(yīng)相應(yīng)的位置。86<%dimconn,cmd,myrecordsetsetconn=server.createobject("adodb.connection")conn.open"employee"setcmd=server.createobject("mand")cmd.activeconnection=connmandtext="select*fromempinfo"setmyrecordset=server.createobject("adodb.recordset")myrecordset.open
cmdifmyrecordset.eofthenresponse.write"沒(méi)有記錄!"elseresponse.write"<hr>"dowhilenotmyrecordset.eofresponse.write"職工工號(hào):"&myrecordset("empid")&"<br>"response.write"職工姓名:"&myrecordset("name")&"<br>"response.write"職工性別:"&myrecordset("sex")&"<br>"response.write"職工年齡:"&myrecordset("age")&"<br>"response.write"所在部門:"&myrecordset("dept")&"<br>"response.write"<hr>"myrecordset.movenextloopendif%>879.4.1建立Recordset對(duì)象與數(shù)據(jù)庫(kù)表的操作3、利用Insert語(yǔ)句添加記錄
使用SQL語(yǔ)句的Insert語(yǔ)句可以添加記錄。一般說(shuō)來(lái),添加記錄不需要返回記錄集,可以不使用Recordset
對(duì)象,直接使用Connection對(duì)象的Execute方法來(lái)執(zhí)行相關(guān)的SQL語(yǔ)句就可以了。在SQL語(yǔ)句的雙引號(hào)里面還有雙引號(hào)時(shí),要把里面的雙引號(hào)轉(zhuǎn)化為單引號(hào)才生效。889.4.1建立Recordset對(duì)象與數(shù)據(jù)庫(kù)表的操作例8-3在Users表中加入一條新記錄:要了解Execute方法在本次操作中影響的記錄條數(shù),可以使用number參數(shù),語(yǔ)法為:Connection對(duì)象.ExecuteSQL語(yǔ)句串,number899.4.1建立Recordset對(duì)象與數(shù)據(jù)庫(kù)表的操作4、利用Delete語(yǔ)句刪除記錄
和添加記錄一樣,刪除記錄也不需要返回記錄集,直接使用Connection對(duì)象的Execute方法來(lái)執(zhí)行相關(guān)的SQL語(yǔ)句就可以了。例8-4:909.4.1建立Recordset對(duì)象與數(shù)據(jù)庫(kù)表的操作5、利用Update語(yǔ)句修改記錄例8-5,修改用戶的密碼919.4.4使用分頁(yè)屬性分頁(yè)顯示記錄集
當(dāng)要顯示的數(shù)據(jù)較多時(shí),往往把數(shù)據(jù)分成多頁(yè)來(lái)顯示出來(lái),用戶可以一頁(yè)一頁(yè)地瀏覽。要進(jìn)行分頁(yè),就要用到前面學(xué)習(xí)的Recordset對(duì)象的第三組屬性:PageSize、PageCount和AbsolutePage。下面用例8-8來(lái)進(jìn)行說(shuō)明
929.4.4使用分頁(yè)屬性分頁(yè)顯示記錄集例8-8<!--#includefile="conn.asp"--><html><head><title>分頁(yè)顯示Users中的數(shù)據(jù)</title></head><body><%'a記錄集rsdimrssetrs=Server.CreateObject("ADODB.Recordset")rs.Open"Select*fromUsers",conn,1'如果第一次打開(kāi),不帶URL參數(shù)pageNo,則顯示第一頁(yè)DimpageNo,pageSifRequest.querystring("pageNo")=""Then
pageNo=1else
pageNo=cInt(request.querystring("pageNo"))endif939.4.4使用分頁(yè)屬性分頁(yè)顯示記錄集'b'開(kāi)始分頁(yè)顯示,指向要顯示的頁(yè),然后逐條顯示當(dāng)前的所有記錄rs.PageSize=2'設(shè)置每頁(yè)顯示兩條記錄pageS=rs.PageSize'PageS變量用來(lái)控制顯示當(dāng)前頁(yè)記錄rs.AbsolutePage=pageNo'設(shè)置當(dāng)前顯示第幾頁(yè)%><!c表頭內(nèi)容><tableborder="1"><caption>表Users的內(nèi)容</caption><trheight="30"bgcolor="#808080"><td>ID</td><td>Name</td><td>Email</td><td>Topic</td><td>Reply</td><td>Power</td></tr>949.4.4使用分頁(yè)屬性分頁(yè)顯示記錄集'd表中的內(nèi)容,用循環(huán)實(shí)現(xiàn)<%Dowhilenotrs.EofandpageS>0%><tr><td><%=rs("Id")%></td><td><%=rs("Name")%></td><td><%=rs("Email")%></td><td><%=rs("Topic")%></td><td><%=rs("Reply")%></td><td><%=rs("Power")%></td></tr><%rs.moveNext
pageS=pageS-1Loop%>959.4.4使用分頁(yè)屬性分頁(yè)顯示記錄集<!e顯示頁(yè)數(shù)的一行存在鏈接的文字><tr><tdcolspan="6"align="right"><%
response.write
rs.RecordCount&"條 "'共多少條記錄
response.write
rs.PageCount&"頁(yè) "'共分多少頁(yè)
response.write
pageNo&"/"&rs.PageCount&"頁(yè) "'當(dāng)前頁(yè)的位置
dimi'i作為循環(huán)變量
fori=1tors.PageCount
ifi=pageNothen
response.write
i&" "'分頁(yè),如果是當(dāng)前頁(yè),則不存在鏈接
else
response.write"<ahref='8-8.asp?pageNo="&i&"'>"&i&"</a> " endifnext%></td></tr>969.4.4使用分頁(yè)屬性分頁(yè)顯示記錄集</table></body></html><%rs.closesetrs=nothingconn.closesetconn=nothing%>程序說(shuō)明:①程序是按指定頁(yè)顯示該頁(yè)記錄。②a部分建立Recordset對(duì)象rs,如果URL沒(méi)有參數(shù),則顯示第一頁(yè)。③b部分利用循環(huán)依次顯示pageNo值指向頁(yè)的每一條記錄。④每頁(yè)的循環(huán)條件中要判斷兩種結(jié)尾,一種是本頁(yè)的結(jié)尾pageS>0,另一個(gè)是還要判斷是否是整個(gè)記錄的結(jié)尾rs.Eof。979.4.5使用Field對(duì)象和Fields集合
Field對(duì)象又稱字段對(duì)象,是Recordset的子對(duì)象。在一個(gè)記錄集中,每一個(gè)字段就是一個(gè)Field對(duì)象,而所有的Field對(duì)象組合起來(lái)就是Fields集合。rs(“Email”)rs.Fields(“Email”)rs.Fields(“Email”).Valuers.Fields.Item(“Email”).Value98rs.(3)rs.Fields(3)rs.Fields(3).Valuers.Fields.Item(3).Value字段的索引值可以通過(guò)Select語(yǔ)句來(lái)改變此索引值。如:SelectEmail,Id,Name,PowerfromUsers1、Fields集合的屬性和方法Fields集合的屬性只有一個(gè),就是Count屬性。該屬性返回記錄集中字段(Field對(duì)象)的個(gè)數(shù)。語(yǔ)法為:
Recordset對(duì)象.Fields.Count999.4.5使用Field對(duì)象和Fields集合
Fields集合的方法Fields集合有Item和refresh兩個(gè)方法。Item方法用于建立某一個(gè)Field對(duì)象。語(yǔ)法為:SetField對(duì)象=Recordset對(duì)象.Fields.Item(字段名或字段索引值)其中字段索引值是根據(jù)記錄集中的先后順序從0到Fields.Count-1Item和Fields都是可以省略的。Refresh方法用于刷新記錄,可以重新取得Fields數(shù)據(jù)集合中所包含的Field對(duì)象。下面通過(guò)例8-9來(lái)說(shuō)明Field對(duì)象的的建立方法。1009.4.5使用Field對(duì)象和Fields集合
1019.4.5使用Field對(duì)象和Fields集合
2、Field對(duì)象的屬性和方法屬性說(shuō)明Name表示字段的名稱Value表示字段的值Type字段的數(shù)據(jù)類型DefinedSize表示字段的長(zhǎng)度Precision表示字段存放數(shù)字的最大位數(shù)NumericScale表示字段存放數(shù)字的最大值A(chǔ)ctualSize表示字段的數(shù)據(jù)長(zhǎng)度Attributes表示字段的數(shù)據(jù)屬性O(shè)riginalValue表示數(shù)據(jù)字段是從第一次啟動(dòng)或是在調(diào)用update方法前的值UnderlyingValue表示數(shù)據(jù)庫(kù)中Field對(duì)象的當(dāng)前值1029.4.5使用Field對(duì)象和Fields集合
1031049.4.5使用Field對(duì)象和Fields集合Field對(duì)象的方法包括AppendChunk,GetChunk等。AppendChunk方法和Ge
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)生作文我的夢(mèng)想征文
- 云南省怒江傈僳族自治州福貢縣聯(lián)考2024-2025學(xué)年高一上學(xué)期1月期末生物學(xué)試題(含答案)
- 國(guó)際貿(mào)易實(shí)務(wù)中的結(jié)算方式知識(shí)考點(diǎn)
- 個(gè)人自助圖書(shū)館借閱服務(wù)合同
- 現(xiàn)代服務(wù)業(yè)服務(wù)質(zhì)量評(píng)價(jià)標(biāo)準(zhǔn)知識(shí)考點(diǎn)
- 互聯(lián)網(wǎng)產(chǎn)品策劃題
- 辦公空間能源消耗表格:能耗統(tǒng)計(jì)、節(jié)能減排
- 金融投資行業(yè)市場(chǎng)波動(dòng)風(fēng)險(xiǎn)免責(zé)聲明
- 醫(yī)學(xué)知識(shí)視頻培訓(xùn)課件
- 工作計(jì)劃完成情況統(tǒng)計(jì)表格
- 2023年版-腫瘤內(nèi)科臨床路徑
- 新生兒呼吸窘迫綜合征的治療和醫(yī)療護(hù)理培訓(xùn)課件
- 產(chǎn)品品質(zhì)檢驗(yàn)流程標(biāo)準(zhǔn)規(guī)范模板()
- 五金公司KPI績(jī)效考核全套
- DB12-595-2015醫(yī)院安全防范系統(tǒng)技術(shù)規(guī)范
- 五年級(jí)下冊(cè)英語(yǔ)課件-Unit 2 My favourite season B Let's learn 人教PEP版(共15張PPT)
- GB∕T 7260.40-2020 不間斷電源系統(tǒng) UPS 第4部分:環(huán)境 要求及報(bào)告
- 中學(xué)生心理健康診斷測(cè)驗(yàn)-MHT量表
- 高邊坡施工危險(xiǎn)源辨識(shí)及分析
- 【李建西醫(yī)案鑒賞系列】三當(dāng)歸四逆湯治療頸腫案
- 安全文明施工管理(EHS)方案(24頁(yè))
評(píng)論
0/150
提交評(píng)論