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