版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八章ASP數(shù)據(jù)訪問(wèn)
本章提要:木章介紹數(shù)據(jù)訪問(wèn)的基本概念,并以Access數(shù)據(jù)庫(kù)為例,詳細(xì)介紹ASP
的數(shù)據(jù)庫(kù)連接,記錄的寫入、查詢、刪除、修改等操作,通過(guò)實(shí)例介紹如果在頁(yè)面上進(jìn)行
記錄的顯示和分頁(yè)等技術(shù)。
8.1表單數(shù)據(jù)傳送
通過(guò)表單元素向服務(wù)器傳送變量,然后將變量值顯示在客戶端的瀏覽器,是一項(xiàng)很平
常而重要的工作。
8.1.1表單元素
表單元素就如VisualBasic之中的控件一樣。在Dreamweaver2004中,提供了這些
元素的具體形式。而表單域作為互動(dòng)性的一種高級(jí)類型,它將表單元素結(jié)合在一起,讓用
戶可以通過(guò)瀏覽器,將數(shù)據(jù)傳送到服務(wù)器上的其他AS〉應(yīng)用程序。
所有的通用表單元素(如單選按鈕、下拉列表、復(fù)選框等)都可以根據(jù)網(wǎng)站的整體構(gòu)
思添加到頁(yè)面之上,以完成網(wǎng)頁(yè)的制作。
下面的圖8.1給出了Dreamweaver2004中的表單元素,它們包括文本字段、隱藏域、
文本域、復(fù)選、單選、單選組、列表菜單、跳轉(zhuǎn)菜單、圖像域、文件域、按鈕、標(biāo)簽、字
段集等。
KacroaediaDrea>veaverIX2004-[無(wú)標(biāo)題文檔(Untitled-1)]
文件國(guó))編輯口查看9插入9修改也文本①命令?站點(diǎn)6)窗口世)幫助國(guó))
表單▼(□□由卬回回回囿囪|畫畫口畫:亡!
Untitled-l////////j
他ii?代|.烏向設(shè)yj檢準(zhǔn)呼電//匚1一]儂:叫\(zhòng)印\(\上
I\\\
表/單文本/字段隱藏/域文i/域復(fù)l選單l選單!選綱列表菜/單.跳轉(zhuǎn)\余整圖像域文件域按%標(biāo)簽?段集
圖8.1DreamweaverMX2004設(shè)計(jì)視圖中的表單元素
也可以通過(guò)插入菜單,來(lái)插入這些表單元素。圖8.2給出了通過(guò)插入菜單插入表單元
素的列表。
圖8.2DreamweaverMX2004設(shè)計(jì)視圖下插入菜單中的表單元素
8.1.2建立表單域
表單元素放在一個(gè)表單域里面,建立一個(gè)表單域,然后修改動(dòng)作里面的文件為要接受
這個(gè)表單變量的ASP文件。方法有兩種,--種是post,這個(gè)方法傳送的變量不會(huì)在瀏覽器
的地址欄里面顯示,可以大批量傳送數(shù)據(jù);另一種是get,則是會(huì)在瀏覽器地址欄里面顯
示的。
下面我們通過(guò)一個(gè)文本表單元素來(lái)說(shuō)明建立表單域的方法。
文本域是最基本的表單元素,它傳送的是文本信息。一般用戶名、密碼等都要用這個(gè)
元素傳送,只不過(guò)如果是密碼的話,要在類型里面選擇密碼類型,這樣就會(huì)以*代替顯
示出來(lái)的密碼字符。文本域的名字很重要,以后會(huì)用到這個(gè)名字所以一般不用默認(rèn)的名字。
示例:
?建立一個(gè)提交表單aspOlf.asp文件。圖8.3為代碼,圖8.4為顯示效果。
taspOlf.asp-記事本13回區(qū))
文件9編輯②格式Q)查看9幫助國(guó))
<formname=''fornd?'method=''post''action="aspG1.asp''>
用戶:<inputtype='*text"name=',user,,Xbr><br>
密碼:<inputtype=?,password,,name=,,pass,,>
<br><br>
性別:<inputtype="radio"nane=",sex"ualue="男?,男
<inputtype=,,radioi,narne=,,sex"ualu11'女,,>女
<br><br>
城市:<selectnane=,,city">
<optionualue="長(zhǎng)沙"selected)長(zhǎng)沙〈/option)
<optionualue="就雙”>武漢</option>
<optionualue="關(guān)酬鄭州〈/optionX/selectXbrX"〉
<inputtype=*'subinit"nane="subnit1*'ualue=,■確定”>
<inputtype=,,reset,inane=*,submit2"ualue=''成消"Xbr》
</forn>
圖8.3提交表單aspOlf.asp
圖&4提交表單aspOlf.asp的顯示效果
這個(gè)表單開(kāi)始的一行:<formname="forml"method="post"action="aspOl.asp">,
指定了表單提交的模式為post方式以及向誰(shuí)(aspOLasp)提交。
這個(gè)表單中有兩個(gè)用于數(shù)據(jù)輸入的文本框:用戶和密碼。注意密碼框的type屬性是
password,那么在密碼輸入時(shí),為安全起見(jiàn),將不會(huì)顯示其值,而用*號(hào)代替。另有兩
個(gè)單選按鈕,用于選擇性別。還有一個(gè)選項(xiàng)列表,用于選擇城市。最后兩個(gè)按鈕,一個(gè)用
于確定提交,一個(gè)用于取消重置,請(qǐng)分別注意它們的type屬性為submit和reset。
?建立一個(gè)接收提交信息并顯示的頁(yè)面aspOl.asp。圖8.5為代碼。
taspOl.asp-記事本□0?
文件9端輯幽)格式Q)查看9幫助國(guó))
<%
user=request?for''user'')
pass=request.formCpass*,)
sex=request.FormC'sex'')
city=request.form("city")
response.writeuserft***,
response.writepass&>a”
response.write
response.writecity
%>
圖8.5接收并顯示提交信息頁(yè)面aspOl.asp
由于前面是用的post方法,那么在aspOl.asp里叫就可以用這樣的語(yǔ)句來(lái)得到變
fi:<%user=request,form(〃user〃)%>。如果要顯示變量則用:<%response,write
user%>o而如果方法用的是get方法,那么就改為<%
name=request.querystring("user")%>。實(shí)際上,兩者可以統(tǒng)一為name二request(〃name〃)。
?運(yùn)行。
下面是運(yùn)行時(shí)的狀態(tài)。圖8.6首先執(zhí)行asp()lf.asp,填入數(shù)據(jù)后,按確定提交,得到
圖8.7的顯木結(jié)果。
圖8.6執(zhí)行提交表單并填入信息
?http://localhost/yunlun/w>root/test/aspOl.asp二回區(qū))
文件9編輯?查看9收藏?工具①幫助?
地址也)▼葡http://Iocalhost/yunlun/wwwroot/test/aspO1.asp
張三123456女武漢
為完畢■a本地Intranet
圖8.7接收顯示結(jié)果
8.2數(shù)據(jù)庫(kù)的建立
為了進(jìn)行數(shù)據(jù)的訪問(wèn),首先要建立數(shù)據(jù)庫(kù),本節(jié)以Access2003為例,建立一個(gè)名為
exasp.mdb的數(shù)據(jù)庫(kù),并建立一個(gè)users數(shù)據(jù)表,以備本章示例之用。有關(guān)其他類型的數(shù)
據(jù)庫(kù),我們?cè)诤竺鎸⒔o出一個(gè)總結(jié)說(shuō)明,而更多的數(shù)據(jù)庫(kù)知識(shí),請(qǐng)參閱相關(guān)資料。下面通
過(guò)圖示,快速介紹建立的過(guò)程。
圖8.8Access2003工作界面
圖8.8Access2003新建文件面版
文件新建數(shù)據(jù)庫(kù)
圖8.10exasp.mdb對(duì)象設(shè)計(jì)窗體
users:表
圖8.11在exasp.mdb數(shù)據(jù)庫(kù)新建表users
圖8.12設(shè)置time字段默認(rèn)值
圖8.13輸入幾條初始數(shù)據(jù)庫(kù)而得到的表
8.3數(shù)據(jù)庫(kù)的連接與記錄的讀E
本節(jié)學(xué)習(xí)掌握ASP頁(yè)面的Access數(shù)據(jù)庫(kù)的連接,以及數(shù)據(jù)表記錄的讀取。下面的步
驟是一個(gè)典型的ASP與數(shù)據(jù)庫(kù)連接的過(guò)程:建立連接對(duì)象、設(shè)置數(shù)據(jù)庫(kù)路徑:打開(kāi)數(shù)據(jù)庫(kù)、
設(shè)置記錄對(duì)象、取記錄。在ASP中,用來(lái)存取數(shù)據(jù)庫(kù)的對(duì)象統(tǒng)稱ADO(ActiveDataObjects),
主要含有三種對(duì)象:Connection:數(shù)據(jù)連接對(duì)象,用于打開(kāi)或連接數(shù)據(jù)庫(kù)。Recordset:
記錄集對(duì)象,用于存取數(shù)據(jù)表記錄。Command:命令對(duì)象,用于對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢命令。
8.3.1數(shù)據(jù)庫(kù)的連接
基于微軟HS的平臺(tái)上,通過(guò)服務(wù)器端運(yùn)行的ASP程序來(lái)訪問(wèn)后臺(tái)數(shù)據(jù)庫(kù),是一種最
常見(jiàn)的模式。而對(duì)于小型的數(shù)據(jù)庫(kù)應(yīng)用需求,微軟的Access數(shù)據(jù)庫(kù),應(yīng)該是與ASP程序
配套使用的首選。由于Access數(shù)據(jù)庫(kù)的ODBC驅(qū)動(dòng)程序支持的SQL指令集,執(zhí)行效率高,
所以Access后臺(tái)數(shù)據(jù)庫(kù)、ASP服務(wù)器端程序、客戶端IE瀏覽器,是一個(gè)精練實(shí)用高效的
組合模式。在這種使用模式中,ASP程序無(wú)疑是最重要的,是溝通客戶端和后臺(tái)數(shù)據(jù)庫(kù)之
間的橋梁。在ASP程序中,通過(guò)VBScript,建立對(duì)Access數(shù)據(jù)庫(kù)的連接,是客戶能夠訪
問(wèn)后臺(tái)數(shù)據(jù)庫(kù)的前提。
連接各數(shù)據(jù)庫(kù)可以使用驅(qū)動(dòng)程序,也可以使用數(shù)據(jù)源,建議大家使用驅(qū)動(dòng)程序,因?yàn)?/p>
使用驅(qū)動(dòng)程序非常方便、簡(jiǎn)單,而使用數(shù)據(jù)源比較麻煩。
請(qǐng)看下面的代碼:
<%
setconn=server.createobject(^adodb.connection")
conn,open"Provider二Microsoft.Jet.OLEDB.4.0;Data
Source="&server.mappath("exasp.mdb〃)
%>
?程序行:setconn=server.createobjectC'adodb.connection^),利用Server對(duì)
象的crcatcobjcct方法,建立一個(gè)ADO對(duì)象集中的connection對(duì)象,即連接對(duì)象。這是
建立數(shù)據(jù)庫(kù)連接的初始步驟。執(zhí)行這行程序后,conn成為一個(gè)連接對(duì)象。
?程序行:conn,open〃Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&
server,mappath("exasp.mdb"),利用連接對(duì)象conn的open方法打開(kāi)一個(gè)指定的數(shù)據(jù)
庫(kù)。其中,服務(wù)器對(duì)象的mappath函數(shù),取得要打開(kāi)數(shù)據(jù)庫(kù)的完整的文件路徑,這其中,
數(shù)據(jù)庫(kù)名是我們需要指定的參數(shù),應(yīng)該用我們要打開(kāi)的數(shù)據(jù)庫(kù)的實(shí)際名稱替代。如果數(shù)據(jù)
庫(kù)名是直接作為常量出現(xiàn),要用引號(hào)將其括起來(lái),并且不能丟掉擴(kuò)展名。
簡(jiǎn)單地說(shuō),上面的代碼就是兩句話,第一句話定義了AD0DB數(shù)據(jù)連接組件conn,第二
句話利用連接組件conn連接到了數(shù)據(jù)庫(kù)exasp.mdbo
再看下面的代碼:
<%
exec=〃select*fromusers”
setrs=server.createobject("adodb.recordset^)
rs.openexec,conn
%>
這三條語(yǔ)句加在前面兩條語(yǔ)句的后面。
?程序行:exec="select*fromusers”。設(shè)置查詢數(shù)據(jù)庫(kù)的命令,它是通過(guò)一個(gè)
SQL查詢語(yǔ)句實(shí)驗(yàn)的。select后面加的是字段,*表示所有字段,from后面再加上表的名
字,我們前面在exasp.mdb數(shù)據(jù)庫(kù)中建立了一個(gè)users表。
?程序行:setrs=server.createobject(''adodb.recordset^)o定義一個(gè)記錄集組
件。今后,可以將通過(guò)執(zhí)行查詢所有搜索到的記錄都放在這個(gè)組件(對(duì)象)中,
?程序行:rs.openexec,conno是打開(kāi)這個(gè)記錄集,exec就是前面定義的查詢命令,
conn就是前面定義的數(shù)據(jù)廢連接組件。這一句的含義可能簡(jiǎn)單理解為:在conn所指定的
數(shù)據(jù)庫(kù)中去,依據(jù)exec的設(shè)定去執(zhí)行查詢,將查詢結(jié)果放在打開(kāi)的rs對(duì)象中。關(guān)于這條
語(yǔ)句的參數(shù)值說(shuō)明如下:
格式:
Recordset.openSource,ActiveConnection,CursorType,LockType,Options
各參數(shù)的含義如下表&1
參數(shù)含義值參數(shù)值含義
SQL查詢、數(shù)據(jù)表
Source
或存儲(chǔ)過(guò)程
打開(kāi)的連接或連
ActiveConnection
接字符串
0只在記錄中向前移動(dòng),速度較快。
可任意移動(dòng),其他用戶修改記錄可見(jiàn),添加記錄不可
1
見(jiàn),刪除記錄字段值不可用。
CursorType游標(biāo)類型
可任意移動(dòng),其他用戶改、添、刪的記錄均可見(jiàn),速
2
度較慢。
3可任意移動(dòng),其他用戶增、刪、改的記錄均不可見(jiàn)。
0記錄為只讀
只要保持Recordset為打開(kāi),其他用戶就無(wú)法編輯該
1
記錄集中的記錄。
LockType并發(fā)控制
2當(dāng)更新recordset中的記錄時(shí),將記錄加鎖
3以批模式時(shí)更新記錄時(shí)加鎖
1SQL語(yǔ)句
2數(shù)據(jù)表名
指定source傳遞
Options
命令的類型
4存儲(chǔ)過(guò)程
8未知類型
表8.1Recordset,open參數(shù)說(shuō)明
8.3.2記錄的讀取
以下語(yǔ)句完成記錄的讀?。?/p>
<tablewidth="100%"border=〃1〃cellspacing=
<%dowhilenotrs.eof%>
<tr>
<tdalign=/,centerA><%=rs("ID")%X/td>
<tdalign=,,center,/X%=rs(,,name,,)%X/td>
<tdalign="center"><爐rs(,,tel,,)%></td>
<tdalign=/,centerA><%=rs(〃city〃)%X/td>
<tdalign="center"><%=rs("time")%X/td>
</tr>
<%
rs.movenext
loop
%>
</table>
在一個(gè)表格中,我們用5列分別顯示了上次建立的表里面的5個(gè)字段,用d。循環(huán),
notrs.eof的意思是條件為沒(méi)有讀到記錄集的最后,rs.movenext的意思是顯示完一條轉(zhuǎn)
到下面一條記錄,<%二國(guó))等價(jià)于覲response.wrile%>用于在html代碼里面插入asp代碼,
主要用于顯示變量。
8.3.3示例
下面的圖示給出了一個(gè)表、一個(gè)查詢顯示數(shù)據(jù)ASP頁(yè)面及其執(zhí)行結(jié)果。注意:通常我
們將數(shù)據(jù)庫(kù)連接語(yǔ)句作為單獨(dú)的ASP文件(如conn,asp),而在具體的數(shù)據(jù)庫(kù)操作頁(yè)面中,
通過(guò)一條語(yǔ)句包含這個(gè)文件即可:<!—^includefile="conn,asp”>。
F
■users:表
IDnametelcitytime
?0張三8898002長(zhǎng)沙35-4-919:53:01
2李四8834990武漢£-4-100:43:18
3王五8787665鄭州35-4-100:44:38
米(自動(dòng)編號(hào))035-4-100:47:05
II
||記錄:叵11口口[>1心米]共有記錄數(shù):3<>
圖8.14已建立的數(shù)據(jù)庫(kù)exasp.mdb中的表users
conn,asp-記事本
文件更)編輯d)格式查看?幫助?
<%
setconn=seruer.createobject(,,adodb.connection,,)
conn.open,,Prouider=Microsoft.Jet.OLEDB.4.0;Data
Source=,,&seruer.mappath(??exasp.ndb**)
%>
圖8.15用戶數(shù)據(jù)庫(kù)連接的conn.asp
Pasp02.asp-記事本13回區(qū)I
文件更)編輯⑥格式查看9幫助國(guó))
<?-ttincludeFile=,,conn.asp"―>
<%
exec=,,select*fromusers"
setrs=seruer.CreateObjectf^adodb.recordset**)
rs.openexec,conn
%>
<tablewidth=,,100%t,border=,,1i,cellspacing=,,1,,>
<%dowhilenotrs.eof%Xtr>
<tdalign=,'center,,XZ=rs("ID'')%></td>
<tdalign=,,center,,><%=rs(*,nane,')%></td>
<tdalign="center"XZ=rs(”tel")*><八d>
<tdalign=',center,'X%=rs(,,city")%></t(l>
<tdalign=",center"><%=rsC,time,,)V</t(l>
</tr><%
rs.rnouenext
loop
%>
圖8.16通過(guò)查詢顯示數(shù)據(jù)頁(yè)面asp02.asp
芻http://localhost/yunlun/wwroot/test/asp02.asp...13回岡
圖8.17asp02.asp的執(zhí)行結(jié)果
8.4記錄的寫入
8.4.1記錄寫入
先建立一個(gè)表單(圖8.18)
,asp03f.asp-記事本匚)叵|國(guó)|
文件國(guó))編輯量)格式Q)查看W)幫助國(guó))
<h3>寫入表單</h3Xhr>
<FormnafneiFornrrmethod=,'posf,action=,,asp03|.asp,,>
name:<inputtype=*,text,inarne=,,nane,,Xbr><br>
tel:<inputtype=,,text,inane=,,tel,,Xbr><br>
city:<inputtype=,,text"nane=,,city,,ualue=',,,Xbr><br>
<inputtype=,,submit"nane""Subiiit"ualue="確定
<inputtype="reset"namesaaSubmit2aaualue=■,取消
</Forn>
圖8.18寫入提交表單
再建立一個(gè)記錄寫入操作ASP頁(yè)面(圖8.19)。
其中包含了conn,asp文件,用以連接到數(shù)據(jù)庫(kù)exasp.mdb。通過(guò)request對(duì)象,得到
提交表單中的值,將其賦給相應(yīng)變量。接著建立一個(gè)SQL杳詢字符串:exec二〃insertinto
users(name,tel,city)values('〃&name&〃',‘〃&city&〃')〃
insertinto后面加的是表的名字users,緊跟其后的括號(hào)里面是需要添加的字段名,
不用添加的字段以及字段內(nèi)容為默認(rèn)值的,可以省略不寫。values后面是傳送過(guò)夾的變量。
以后執(zhí)行查詢時(shí),將這些變量的值添加到記錄的字段中。
請(qǐng)注意:exec是一個(gè)字符串變量,它保存了一個(gè)SQL查詢語(yǔ)句字符串,這個(gè)字符串是
分為如下七節(jié)通過(guò)&操作符連接起來(lái)的。
“insertintoguestbook(name,tel,message)values(177
〃,〃--I〃,〃?人〃,\〃
name,tel,city)
在ASP里面不能嵌雙引號(hào),可以用單引號(hào)代替雙引號(hào),放在雙引號(hào)里面,連接兩個(gè)變
量用+或者&o中間的name、tel、city,就是表單傳來(lái)的變量。對(duì)于name和city,
將用單引號(hào)括起來(lái),表示是字符串。而tel是數(shù)字型變量,所以不需要單引號(hào)括起來(lái)。
如果用表單傳來(lái)的數(shù)據(jù)代替變量名字,并假設(shè)name二〃張三〃,tel=8877666,ciyt二〃
廣州。則上述查詢字符串的實(shí)際結(jié)果為:
“insertintoguestbook(name,tel,message)values('張三',8877666,‘廣州’)〃
接下來(lái)的conn,execute語(yǔ)句,即執(zhí)行上述exec字符串指定的SQL命令。最后通過(guò)
conn,close把打開(kāi)的數(shù)據(jù)廢關(guān)閉,把定義的組件conn設(shè)置為空,并顯示添加成功提示信
息。
Pasp03.asp-記事本
文件任)編輯堡)格式Q)查看W)幫助國(guó))
K,一ttincludefile=*,conn.asp'*―>
<%
name=request?for做''name'')
tel=request.FormCtel*')
city=request.formrcity")
exec=,,insertintousers(name,tel,city)ualues
(?',&name&“*),B
conn.executeexec
conn.close
setconn=nothing
response.write”記錄添加成功,”
%>
圖8.19記錄寫入操作
運(yùn)行。下面的圖8.20、圖8.21、圖8.22,分別通過(guò)asp03f.asp提交數(shù)據(jù),并執(zhí)行寫
入頁(yè)面asp03.asp。最后查看數(shù)據(jù)庫(kù)表的變化。
圖8.20在寫入表單中鍵入信息
r
芻http://localhost/yunlun/wrroot/test/asp03.asp.??匚]
文件?)編輯?)查看9收藏?工具(X)幫助QI)*
地址也)▼ejhttp://Iocalhost/jninlun/wwwroot/1est/asp03.aspV目轉(zhuǎn)到
記錄添加成功!
目完畢本地Intranet
圖8.21按確定后寫入成功提示
圖8.22數(shù)據(jù)表的變化說(shuō)明添加記錄成功
8.4.2另一種記錄寫入方法
下面介紹另一種記錄寫入的方法。下面一系列圖中給出了相應(yīng)的代碼。提交表單和前
面的基本一樣,只不過(guò)提交的頁(yè)面換了一個(gè)示例頁(yè)面aspO3a.asp。
這里主要談?wù)剬懭胗涗涰?yè)面。該頁(yè)面的代碼如下:
<!-#includefile二〃conna.asp”—>
<%
sql=zzselect*fromusers”
rs.opensql,db,1,3
rs.addnew
rs("name")=request.form("name")
rs("tel")二request.form(〃tel〃)
rs("city〃)=request.form(〃city〃)
rs.update
rs.close
setrs=nothing
response,write〃記錄添加成功!〃
%>
上述代碼中主要有幾點(diǎn)不同于前面的第一種方法:
?在conna.asp中,建立了記錄集對(duì)象。而rs.opensql,db,1,3,記錄集對(duì)象rs,
以可寫入方式打開(kāi)了通過(guò)sql查詢得到的數(shù)據(jù)表記錄。
?對(duì)于rs.addnew,先行創(chuàng)建一條空的新記錄。
?然后通過(guò)賦值的方式將提交表單提交的數(shù)據(jù)寫入到記錄集的新記錄之中。
?通過(guò)rs.update更新數(shù)據(jù)庫(kù)表,即實(shí)際寫入。
E'asp03af.asp-記事本國(guó)]回區(qū)]
文件9編輯也)格式Q)查看9幫助兇
<h3>寫入表單</h3Xhr>
<Fornnane=*,form1,'method=''po$t''action=**asp03a.asp'^
name:<inputtype=,,text,*nane=,,nane,,><br><br>
tel:<inputtypeitext"nane=,,tel,,Xbr><br>
city:<inputtype=',text,iname=,,city,,ualue=,,,,Xbr><br>
<inputtypp=,,sublnit,,ualu?—?確定
<inputtype="reset"name=",Subnit2"ualue=''取消"〉
</Forn>
圖8.23向asp03a.asp提交的表單
conna.asp-記事本I3回區(qū)
文件任)編輯起)格式查看W)幫助國(guó))
<%
setdb=Seruer.CreateObject("ADODB.Connection")
db.open,,DBQ="&seruer.nappath("exasp.ndb*')&";driuer=
<microsoftaccessdriuer(*.ndb)}**
setrs=Seruer.CreateObject("ADODB.Recordset*')
%>
圖8.24數(shù)據(jù)庫(kù)連接與記錄集的定義
Pasp03a.asp-記事本13回區(qū)
文件g編輯②格式@)查看9幫助國(guó))
<?-ttincludeFile=*'conna.asp**―>
<%
sql=",select*Fromusers',
rs.opensqlydb91y3
rs.addnew
r5(''name'')=request
rs(,,tel,*)=request.Forn(**tel")
rs("city")=request.form("city")
rs.update
rs.close
setrs=nothing
response.write”記錄添加成功,”
%>
圖8.25寫入記錄的另一方式
圖8.26通過(guò)提交表單提交數(shù)據(jù)
http://localhost/yunlun/r?root/test/asp03a.asp...
文件更)編輯?)查看(V)收藏⑥工具①幫助國(guó))
地址也)▼http://localhost/yunlun/wwwroot/test/asp03a.asp
記錄添加成功!
為完畢■A本地Intranet
圖8.27記錄添加成功
圖8.28數(shù)據(jù)庫(kù)表的變化顯示記錄添加成功
8.5記錄的查詢
本節(jié)學(xué)習(xí)掌握通過(guò)ASP頁(yè)面對(duì)Access數(shù)據(jù)庫(kù)表記錄的查詢顯示。顯然,我們要對(duì)所
有記錄進(jìn)行查詢,但是我們真正需要得到的記錄,不可能是所有記錄,所有我們必須能夠
通過(guò)適當(dāng)?shù)牟樵兎绞?,?lái)得到我們所要的記錄。
例如:下面的語(yǔ)句,依據(jù)SQL直詢語(yǔ)句,通過(guò)記錄集組件rs,得到所有記錄。這不我
們最后所需要的。
<!-includefile=//conn.asp*—>
<%
exec二〃select*fromusers”
setrs=server.createobject("adodb.recordset")
rs.openexec,conn,1,1
%>
下面請(qǐng)先看一組語(yǔ)句:
a=〃張三〃
b=8898002
exec=z,select*fromuserswherename='〃+a+”'andtel="+b
where后面加上的是條件,與是and,或是or,我想二,<二,>=,<,>的含義大家都知
道吧。這句話的意思就是搜索name是張三的,并且電話是111的記錄。還有一點(diǎn)就是如
果要搜索一個(gè)字段里面是不是包含一個(gè)字符串就可以這么寫:whereinstr(name,a)也就
是搜索name里面有a(張三)這個(gè)字符串的人。
我這里的a,b,是常量,大家可以讓a,b是表單提交過(guò)來(lái)的變量,這樣就可以做一個(gè)搜
索了。
t?asp。4f.asp一記事本
文件9編輯?格式Q)查看9幫助國(guó))
<fornname=''formT'method=,'poste,action=',asp04.asp,,>
<h3>請(qǐng)輸入查詢條件:</h3Xhr><br>
姓名;<lnputtype="text"nane=',nane">
,,,,
電話s<inputtype="text"name=tel>
<br><br>
<inputnane=',Subrnit,'ualue="確定”
<inputtype=f,reset"name="Subnit2(aualue=''取消”>
</Forn>
圖8.29杳詢條件提交表單
圖8.30查詢條件提交表單顯示效果
PaspO4.asp-記事本
文件任)編輯更)格式Q)查看W)幫助國(guó))
<?—ttincludefile=conn.asp-->
<%
name=request?for做''name")
tel=request
exec='*select*Fromuserswherenane=",,+nane+***and
tel="+tel
setrs=seruer.createobject('*adodb.recordset*1)
rs.openexec,conn,1,1
%>|
<tablewidth=,,100%,iborder=,,1,,>
<%
dowhilenotrs.eof
%><trheight=30>
<tdaliqn=center><%=rs(',nane,,)%></td>
<tdalign=centerXZ寸八d〉
<tdalign=center><%=rs(',city,,)%X/td>
<tdalign=center><%=rs("time,,)%X/td>
</tr>
<%
rs.mouenext
loop
%>
</table>
</html>
圖8.3l查詢并顯示結(jié)果
'Ahttp://localhost/yunlun/?vroot/test/asp04f.asp...
圖8.32執(zhí)行查詢條件提交表單
5http://localhost/yunlun/?<root/test/asp04.asp
文件QF)編輯查看9收藏?工具(T)幫助公sr
地址也)▼http://localhost/yunlun/wwwroot/test/asp04.asp0份轉(zhuǎn)到
張三8898002長(zhǎng)沙2005-4-919:53:01
張三8898002上海2005-4-232:05:40
⑥完畢■2本地Intranet
圖8.33顯示查詢結(jié)果
8.6記錄的刪除
本節(jié)學(xué)習(xí)掌握通過(guò)ASP頁(yè)面對(duì)Access數(shù)據(jù)庫(kù)表記錄的刪除操作。記錄的刪除操作可
使用SQL刪除語(yǔ)句來(lái)實(shí)現(xiàn)。
假設(shè)數(shù)據(jù)exasp.mdb的users表的記錄如卜.圖:
圖8.34users表記錄
請(qǐng)看下面的例子:在一個(gè)表單中輸入要?jiǎng)h除記錄的1D號(hào),然后刪除數(shù)據(jù)庫(kù)表中與這
個(gè)輸入值相同的ID的記錄。
E'asp05f.asp-記事本匚叵]區(qū)]
文件9編輯起)格式Q)查看W幫助直)
<Fornname=,'Forn1,'nethod=',post,*action=*'asp05|.asp,>>
請(qǐng)輸入刪除記錄ID:
<inputtype=,,texti,name=,,id,,>
<inputtype=,,subl^it,,nane=,,Submit,,ualue="確定'>>
</Forn>
圖8.35刪除條件提交表單
圖8.34中,給出了提交刪除申請(qǐng)的表單文件asp05f.asp,它向asp05.asp提交刪除
條件數(shù)據(jù)。
圖8.35中,給出了刪除記錄并顯示剩余記錄的代碼。其中下面兩行是關(guān)鍵性的代碼。
exec=/,delete*fromuserswhereID=〃&request.form(〃id〃)
conn,executeexec
第一行給出用于刪除的SQL語(yǔ)句字符串,其中條件是表中的ID字段值等于來(lái)自提交
表單的id變量值。第二行執(zhí)行這個(gè)SQL刪除語(yǔ)句。
其它代碼包括前面的包括文件和記錄集的定義和打開(kāi)。后面的是用于顯示剩余記錄的
代碼。
Pasp05.asp-記事本
文件國(guó))編輯更)格式Q)查看W)幫助國(guó))
<?一^includeFile=conn.asp->
<%
exec=,'select*fromusers*'
setrs=seruer.createobjectf^adodb.recordset**)
rs.openexecyconn,1,1
exec=,'delete*fromuserswhereID="&request
conn.executeexec
%>
<html>
<body>
<tablewidth=,,1OO%*'border=",1*'cellspacing="1"
cellpadding=,,O,,>
<%
dowhilenotrs.eof
%><tr>
<tdX%=rs(,,ID")%></td>
<tdX%=rs("naine,,)V</td>
<tdX%=rs(,,tel,,)%X/td>
<td><Vrs("city,,)V</td>
<tdX%=rs("time,,)V</td>
</tr>
<%
rs.nouenext
loop
%>
</table>
</body>
</htnl>
圖8.36刪除記錄并顯示剩余汜錄代碼
下面來(lái)執(zhí)行:
圖&37執(zhí)行提交表單并輸入記錄號(hào)
ID號(hào)為6的記錄被刪除剩余記錄顯示如下:
F
-…回回國(guó)―
?http://localhost/yunlun/xvroot/test/asp05.asp
文件編輯d)查看(V)收藏?工具①幫助出)靜
地址①)▼蒞]http://Iocalhost/yunlun/wwwroot/1est/asp05.aspV魚轉(zhuǎn)到
張
1三
2005-4-919:53:01
李
2四
2005-4-100:43:18
王
3五
趙
六2005-4-100:44:38
5
88332212005-4-151:22:12
18sdfadf|1111|dsf|2005-4-152:08:10
19第二方式^78787―海口12005-4-152:12:19
21張三88980021上—1005-4-232:05:40
⑥完畢■a本地Intranet
圖&38執(zhí)行提交表單并輸入記錄號(hào)
8.7記錄的修改
修改記錄是數(shù)據(jù)庫(kù)基本操作之一。下面通過(guò)實(shí)例來(lái)學(xué)習(xí)修改記錄,其中有三個(gè)ASP頁(yè)
面:asp06f.asp(通過(guò)輸入修改查詢條件name來(lái)指定記錄)、asp06.asp(找到并顯示將
被修改的記錄,且可進(jìn)行修改數(shù)據(jù)提交)、asp06s.asp(更新記錄,實(shí)際修改表)。
?請(qǐng)看圖8.39,其中通過(guò)表單提交name數(shù)據(jù)。
,asp06f.asp-記事本匚)叵]反|
文件9編輯⑥格式查看9幫助國(guó))
<H3>記錄的修改</H3〉<HR>
〈formname=*,Forn1,*method=''post''Iaction="asp06.asp*'>
請(qǐng)輸入修改者姓名:
<inputtype=',text,*narne=",nane*'>
<inputtype="subnifnane=*'Submit,*ualue="確定”
</forn>
圖8.39用于給出修改者姓名的提交表單
?請(qǐng)看下面的圖8.40中的代碼。
其中有如下包含語(yǔ)句用于錯(cuò)誤處理:
<!-#includefile=〃err.asp〃一>
err.asp文件有如下代碼用于過(guò)濾錯(cuò)誤信息,當(dāng)田現(xiàn)錯(cuò)誤時(shí),代碼繼續(xù)運(yùn)行。
<%
Response.Buffer=True
OnErrorResumeNext
%>
在后面用以下代碼實(shí)現(xiàn)錯(cuò)誤處理,如果出現(xiàn)錯(cuò)誤則清除頁(yè)面并給出提示信息:
<%IfErr.Number<>0Then
Response.Clear
Response.Write〃沒(méi)有找到記錄!〃
EndIf
%>
下面這一段代碼先定義查詢字符串,然后通過(guò)記錄集對(duì)象打開(kāi)查詢并存放查詢結(jié)果。
注意查詢字符串中的where條件,name表示字段,后面跟一個(gè)字符串,所以要用單引號(hào)將
request,form("name")引起來(lái),request,form("name")則是返回上面提交頁(yè)面中的數(shù)據(jù)作
為查詢值。
<%
exec二〃select*fromuserswherename='"&request.form("name")&〃'〃
setrs=server,createobject("adodb.recordset")
rs.openexec,conn
%>
接下來(lái)定義了一個(gè)表單。一方面這個(gè)表單得到rs的記錄字段值;另一方面表單中的
這些值又可以修改,并可提交給asp06s.asp頁(yè)面。
<formname=formlmethod=postaction=asp06s.asp>
編號(hào)<inputtype="text"name二〃ID〃value="。=rs(〃ID〃)%>〃>
姓名<inputtype二〃text“name="name"value=“〈斤rs(〃name〃)外>〃>
<br>
電話<inputtype="text〃name二〃tel〃value=“<%=rs
城市<inputtype二〃text〃name二〃city"value=“<%=rs(〃city〃)/>〃>
<inputtype=//submit"name="Submit"value=”確定〃X/td>
</form>
最后是關(guān)閉記錄集和數(shù)據(jù)庫(kù)連接對(duì)象。
<%
rs.close
setrs=nothing
conn,close
setconn=nothing
%>
Pasp06.asp-記事本13回區(qū))
文件電)編輯超)格式⑥)查看W)幫助國(guó))
<H3>修改記錄<〃3><皿>
<?一0includeFile=,,err.asp"―>
<?--ttincludeFile=,,conn.asp**-->
<%
exec=,'select*Fromuserswherenarne='"ftrequest.Forin(,,nainef,)&
setrs=sprupr.crpatpohjpctciadodh.rpcordspf)
rs.openexec9conn
%>
<Fornname=''fornrT'method=''post''action=,,asp06s.asp'^
編號(hào)<inputtype="text,Bname—ID"ualue=",<%=rs("ID,,)%>">
姓名<inputtype=',text,iname=''naine''ualue=,,<%=rs(,,name,,)%>">
<br>
電話<inputtype=',texfualue='<*寸sr'tel,?)%>'>
城市<inputtype="text''nane=",city"ualue=,,<%=rs(,'city,,)%>,*>
<inputtype=,,subnitMname=,,Subnit,*ualue="確定"X/td)
</Forn>
<%IFErr.Number<>9Then
Response.Clear
Response.Write”沒(méi)有找到記錄
EndIF
%>
<%
rs.close
setrs=nothing
conn.close
setconn=nothing
%>
圖8.40根據(jù)姓名找出并顯示記錄
?請(qǐng)看下面的圖8.41中的代碼。
為了接受asp06.asp中經(jīng)過(guò)修改后的記錄數(shù)據(jù),必須又要找到那條記錄,這時(shí)通過(guò)前
面已找到的記錄的ID來(lái)定位記錄。注意,在用rs打開(kāi)查詢時(shí)用到了參數(shù)“1,3”。
exec二〃select*fromuserswhereID=〃&request.form(〃ID")
setrs=server,createobject("adodb.recordset")
rs.openexec,conn,1,3
接著用三條語(yǔ)句將修改后的三個(gè)字段值寫入rs記錄集中,再進(jìn)行rs.update,更新數(shù)
據(jù)表,完成修改數(shù)據(jù)記錄值。后面是關(guān)閉記錄集和數(shù)據(jù)庫(kù)連接對(duì)象,并提示記錄修改成功。
rs(〃name〃)=request,form(,zname?/)
rs(/zterz)=request.form(〃tel〃)
rs(〃city〃)=request.form(〃city〃)
rs.update
rs.close
setrs=nothing
conn,close
setconn=nothing
response,write〃記錄修改成功!〃
Easp06s.asp-記事本13回岡
文件9編輯⑥格式查看9幫助Qp
<?-ttincludefile="conn.asp"―>
<%
exec=,'select*FromuserswhereID="&request
setrs=seruer.createobjectC'adodb.recordset")
rs.openexec,conn,1,3
rs("name")=request.forn("name**)
rsCtel'^^request-fornCtel")
rs("city")=request.form("city")
rs.update
rs.close
setrs=nothing
conn.close
setconn=nothing
response.write”記錄修改成功,”
圖8.41修改記錄
?下面是示例演示的情況:
users:表13回岡
IDnameHicitytime
?0張三8898002長(zhǎng)沙35-4-919:53:01
2李四8834990武漢35-4-100:43:18
3王五8787665鄭州35-4-100:44:38
5趙六8833221大同35-4-151:22:12
18sdfadf1111dsf35-4-152:08:10
19第二方式878787???5-4-152:12:19
21張三8898002上海35-4-232:05:40
米(自動(dòng)編號(hào))035-5-6
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年藝術(shù)表演場(chǎng)館服務(wù)合作協(xié)議書
- 2025年金屬雕銑機(jī)項(xiàng)目合作計(jì)劃書
- 2025年齒輪、傳動(dòng)軸和驅(qū)動(dòng)部件項(xiàng)目發(fā)展計(jì)劃
- 多囊卵巢綜合征飲食
- 2025年壓敏熱熔膠項(xiàng)目建議書
- 搶救車急救護(hù)理團(tuán)隊(duì)建設(shè)
- 護(hù)理信息技術(shù)應(yīng)用教程
- 胎兒窘迫的臨床表現(xiàn)與診斷
- 兒童燙傷的特別護(hù)理注意事項(xiàng)
- 先天性心臟病護(hù)理新進(jìn)展
- 鐵路工程道砟購(gòu)銷
- 2024年廣東省廣州市中考?xì)v史真題(原卷版)
- 壯醫(yī)藥線療法
- 超星爾雅學(xué)習(xí)通《中國(guó)古代史(中央民族大學(xué))》2024章節(jié)測(cè)試答案
- 項(xiàng)目4任務(wù)1-斷路器開(kāi)關(guān)特性試驗(yàn)
- 編輯打印新課標(biāo)高考英語(yǔ)詞匯表3500詞
- (高清版)DZT 0215-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 煤
- 高層建筑消防安全培訓(xùn)課件
- 實(shí)驗(yàn)診斷學(xué)病例分析【范本模板】
- 西安交大少年班真題
- JJF(石化)006-2018漆膜彈性測(cè)定器校準(zhǔn)規(guī)范
評(píng)論
0/150
提交評(píng)論