|
訪問(wèn)數(shù)據(jù)庫(kù)(2)
大家好,我是武漢華師的sunwen,上一節(jié)課我向大家講述了如何配置ODBC數(shù)據(jù)源和配置其的作用。今天,我要向大家介紹如何在我們的ASP網(wǎng)頁(yè)中插入語(yǔ)句,利用我們昨天的勞動(dòng)成果,來(lái)打開一個(gè)ACCESS數(shù)據(jù)庫(kù)。下面,就讓我們來(lái)開始吧!
首先,回憶我們昨天的數(shù)據(jù)源名是mydb,也就是我們和系統(tǒng)共同認(rèn)可的一個(gè)數(shù)據(jù)源名,下面,就讓我們使用這個(gè)數(shù)據(jù)源名,與系統(tǒng)進(jìn)行對(duì)話。
第一步,建立ADO對(duì)象連接。進(jìn)行這一步的目的是告訴系統(tǒng)我將要使用數(shù)據(jù)庫(kù)了,請(qǐng)為我建立一個(gè)到數(shù)據(jù)庫(kù)的連接。這一步的語(yǔ)法是:set 變量名=server.createobject("adodb.connection").例:
set objconn=server.createobject("adodb.connection")
下面來(lái)分析這個(gè)語(yǔ)句。首先,objconn這個(gè)變量是我們自已定的,它代表一個(gè)數(shù)據(jù)庫(kù)連接。至于server.createobject("adodb.connection")這個(gè)語(yǔ)句,我們一看就可以大致猜出它們的意義,不就是建立一個(gè)ADO對(duì)象嗎?對(duì)了,什么是ADO對(duì)象呢?唉呀,太麻煩了,不說(shuō)了,總之,我們?cè)谶M(jìn)行每一個(gè)數(shù)據(jù)庫(kù)的ASP編程時(shí),都要進(jìn)行這一步。至于道理,我們慢慢會(huì)明白的。
第二步,我們便要利用我們建立的這個(gè)連接,來(lái)告訴系統(tǒng)我們要打開的數(shù)源,這個(gè)數(shù)據(jù)源就是我們上一課設(shè)置的數(shù)據(jù)源名。它就是mydb。利用它,我們可以很方便地打開一個(gè)數(shù)據(jù)庫(kù)。以我們上一課的設(shè)置為例,打開我們的db2.mdb,可以使用以下語(yǔ)法:
objconn.open "dsn=mydb;database=db2;uid=;pwd=;"
其中dsn就是我們上一課所定的數(shù)源名。database就是我們的數(shù)據(jù)庫(kù)名。uid是user ID,即用戶名,而pwd則是這個(gè)用戶的訪問(wèn)密碼,這只有在我們?yōu)檫@個(gè)數(shù)據(jù)庫(kù)加入了密碼之后才有用,我們暫且不討論它。細(xì)心的讀者已經(jīng)發(fā)現(xiàn)第一步和第二步出現(xiàn)了兩個(gè)objconn,的確,第一步的語(yǔ)句是將一個(gè)到數(shù)據(jù)庫(kù)的連接賦予objconn這個(gè)變量,也就是說(shuō),經(jīng)過(guò)第一步,objconn實(shí)際上就是代表了這個(gè)連接。這樣我們自然可以用這個(gè)連接的open方法來(lái)打開一個(gè)數(shù)據(jù)庫(kù)了。
好了,終于打開了這個(gè)數(shù)據(jù)庫(kù)了,讓我們來(lái)回憶一下我們前面的語(yǔ)句,大家可以把下面的語(yǔ)名直接復(fù)制到你的ASP頁(yè)中,運(yùn)行一下試一試:
set objconn=server.createobject("adodb.connection") objconn.open "dsn=mydb;database=db2;uid=;pwd=;"
如果出現(xiàn)了什么問(wèn)題,可以和我聯(lián)系。
在打開了數(shù)據(jù)庫(kù)之后(盡管屏幕上什么也沒(méi)有),我們可以進(jìn)行第三步了。我們可以想一想,在打開了一個(gè)數(shù)據(jù)庫(kù)之后,我們想要干什么呢?最簡(jiǎn)單的,當(dāng)然是從中讀取我們所要的數(shù)據(jù)。ASP訪問(wèn)數(shù)據(jù)庫(kù)的方法是采用記錄集來(lái)作為數(shù)據(jù)的容器。比如說(shuō)我們執(zhí)行了一條ASP查詢語(yǔ)名,其必然將返回查詢結(jié)果,如果此查詢成功的話,其返回的查詢結(jié)果必然包含了符合我們查詢條件所有記錄。在此,我們將此查詢結(jié)果賦予一個(gè)變量,這個(gè)變量包含了我們查詢語(yǔ)句返回的符合我們條件的也就是我們想要的記錄(數(shù)據(jù)),我們就把這個(gè)變量叫做記錄集。這個(gè)名稱是很形象的。然后我們?cè)僮x取這個(gè)變量,將一條條記錄依次讀取出來(lái)。至于如何讀取記錄集中的記錄,我們以后再討論。下面,我們寫出這個(gè)記錄集語(yǔ)句:
set objrs=objconn.execute("select name from mytab order by name")
其中objrs就是我們剛才所提的那個(gè)變量,也就是記錄集。objconn.execute的意義是通過(guò)objconn這個(gè)連接來(lái)執(zhí)行一個(gè)數(shù)據(jù)庫(kù)查詢語(yǔ)句(“”)內(nèi)的便是一個(gè)非常常見的SQL查詢語(yǔ)名,它的意義是從mytab表中選擇name這一列并以name這一列的數(shù)據(jù)為索引來(lái)排序。(請(qǐng)大家找一些SQL的資料,對(duì)其不要研究得太深,只要知道一些基本的數(shù)據(jù)庫(kù)操作命令即可。如果沒(méi)有,可以找我要。)之后,這個(gè)命令自然返回了name這一列的所有記錄了,而這些記錄,已經(jīng)全部賦給了objrs這個(gè)變量。經(jīng)過(guò)了這個(gè)語(yǔ)句,objrs的身份已經(jīng)從一個(gè)普通變量變成了一個(gè)包含有我們所要的數(shù)據(jù)的一個(gè)“黃金”變量。當(dāng)然,這只不過(guò)是我們的一種理解。實(shí)際上objrs此時(shí)已經(jīng)是一個(gè)對(duì)象,它已經(jīng)具備了許多的方法和屬性。下面,我們便利用它的一此方法和屬性來(lái)讀取記錄集中的記錄。
在進(jìn)行之前,我們有必要粗略地了解一下數(shù)據(jù)集在objrs中的存儲(chǔ)方式。如果我們剛才的命令是:
select name,id from mytab order by name
則返回的數(shù)據(jù)包括兩列,包括name和id這兩列。那么如何從objrs中讀取指定列中記錄呢?可用下列語(yǔ)句:
objrs("列名")
如果要讀取我們上面命令中返回的name這一列,我們可以使用:objrs("name")。
下面,就讓我們完整地把記錄讀出來(lái)吧!
while not objrs.eof response.write objrs("name") objrs.movenext wend
以上程序使用了objrs的eof屬性和movenext方法。有過(guò)紡程經(jīng)驗(yàn)的人對(duì)eof這個(gè)屬性肯定非常熟悉,沒(méi)錯(cuò),它就是用來(lái)判斷這個(gè)記錄集的指針是否已到了記錄集的末尾。
且慢,讓我們來(lái)慢慢分析。當(dāng)我們執(zhí)行set objrs=objconn.execute("select name from mytab order by name")這一命令之后,objrs變成了一個(gè)記錄集,而這個(gè)記錄集中必然要有一個(gè)指針,用來(lái)讀取數(shù)據(jù),如圖所示:
此時(shí),這個(gè)指針指在第一個(gè)記錄上。所以我們?cè)谘h(huán)的第一次調(diào)用objrs("name")時(shí),所讀出來(lái)的是這個(gè)記錄集中name列的第一行數(shù)據(jù)。在讀完了之后,這個(gè)指針并不會(huì)自動(dòng)往下移,面需要我們?nèi)藶榈貜?qiáng)制它往下移,這便是movenext這個(gè)方法的秒用了。objrs.movenext這個(gè)語(yǔ)句的作用正是在每次讀完一行數(shù)據(jù)時(shí)使指針往下移一個(gè)記錄。
現(xiàn)在,讓我們來(lái)把我們今天學(xué)習(xí)的全部程序聯(lián)起來(lái)。
set objconn=server.createobject("adodb.connection") objconn.open "dsn=mydb;database=db2;uid=;pwd=;" set objrs=objconn.execute("select name from mytab order by name") while not objrs.eof response.write objrs("name")&" " objrs.movenext wend
把它們插入到我們的ASP網(wǎng)頁(yè)中,哇,我真的會(huì)使用數(shù)據(jù)庫(kù)了呀!真是得謝謝sunwen了!哈哈!盡管我們已經(jīng)把數(shù)據(jù)成功地讀取了出來(lái),但我們還要反數(shù)據(jù)輸出格式化,這就得用一定的HTML功底了。通過(guò)一系列的HTML元素的運(yùn)用,我們可以把數(shù)據(jù)格式定制地非常好看,甚至可以把他們化為表格的形式。如果需要這種程序范例的可以寫信給我。
差點(diǎn)忘了一個(gè)問(wèn)題,是上一課遺留下來(lái)的。就是如果我們使用的是ISP的空間,我們將怎樣打開數(shù)據(jù)庫(kù)呢?很簡(jiǎn)單,我們只要不通DSN而直接打開就行了,方法如下:
只要把
objconn.open "dsn=mydb;database=db2;uid=;pwd=;"
這一句替換成:
objconn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & SERVER.MapPath("db2.mdb")
想必大家一定看得懂其中的奧妙,我也要去吃飯了,再見!
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!