微軟公司的ASP加上IIS3.0就能為網(wǎng)站建設(shè)、INTRANET應(yīng)用提供一個(gè)靈活的構(gòu)建方法,他可以方便地訪問ODBC兼容的數(shù)據(jù)庫。
這篇文章中,我們將學(xué)到數(shù)據(jù)庫的基本操作,比如建立、添加記錄、刪除記錄、編輯記錄等。
使用ASP建立的動(dòng)態(tài)主頁與瀏覽器無關(guān),也就是說,你不論用哪種瀏覽器都能瀏覽ASP的頁面,使用JSCRIPT和VBSCRIPT加上一些其他ASP元件,你就能在你的INTRANET應(yīng)用中使用ASP。使用ASP不僅意味著您可以讀取ACCESS和SQL SERVER的數(shù)據(jù)庫,同時(shí)也意味著你可以讀取其他ODBC兼容的數(shù)據(jù)庫。 使用ASP將比編寫CGI快的多,對于那些習(xí)慣VISUAL BASIC的人來說, ASP將是最好的選擇。
其他的如 Chili!ASP 功能上與ASP差不多,可以用在許多WWW平臺上,甚至一些UNIX服務(wù)器(比如重慶太陽城,Linux ,ASP腳本用的是PERL語言。譯注)。
在調(diào)試ASP代碼時(shí),我沒有使用調(diào)試器,我發(fā)現(xiàn)大多數(shù)錯(cuò)誤都是由于我的拼寫錯(cuò)誤引起的,或者是在HTML中嵌入變量時(shí)沒有使用??#ü賾讜?TML中引用ASP變量值,或者輸出,我在第一篇文章中有說明。譯注)。
這里提供的代碼僅是一個(gè)例子,不能用做一個(gè)應(yīng)用。如果在沒有記錄時(shí),您嘗試刪除記錄或編輯記錄,程序并沒有處理這種情況。這個(gè)例子是在NT4.0上建立的,數(shù)據(jù)庫用MS Access 7,你必須有32位的ODBC驅(qū)動(dòng)程序。(如果你安裝了IIS3。0或ACCESS,那自然是已經(jīng)有了,譯注)
下面的例子包含了數(shù)據(jù)庫的基本操作,但是這些操作可能每一個(gè)用ASP訪問數(shù)據(jù)庫的人都會(huì)用到。你可以往數(shù)據(jù)庫中添加記錄,編輯或刪除記錄。
圖一:數(shù)據(jù)庫Microsoft Access
數(shù)據(jù)庫
我用ACCESS的數(shù)據(jù)庫做,建立一個(gè)數(shù)據(jù)庫user.mdb
他包含兩個(gè)表:TblUser,TblUserAccess.
TblUSer, 包含用戶的一些信息,有以下字段: -用戶名,用戶登錄名 ,用戶口令,登錄時(shí)間和訪問級別 (USERNAME, USERLOGIN, USERPASSWORD, USERENTRYDATE, and ACCESSID). ACCESSID, 用戶級別指向表TblUserAccess中的 ACCESSID字段. 表 TblUserAccess 用來定義訪問級別- ACCESSDESC
DSN
一旦你建好了數(shù)據(jù)庫,你需要為數(shù)據(jù)庫建立一個(gè)DSN入口,不防給他取名叫:UserDB1. 照下面的步驟去做:(關(guān)于DSN,我將在本文末做介紹,譯注)
單擊???,選設(shè)置控制面板。
雙擊圖標(biāo) "32位 ODBC",將彈出一個(gè)對話框,選標(biāo)簽 "System DSN"
單擊 "Add" 添加一個(gè) DSN 入口, 選擇 "Microsoft Access Drive".確認(rèn)。
在 "Data Source Name" 欄里輸入 "UserDB1", 然后單擊"Select" 選擇數(shù)據(jù)庫,你可以按"Browse" 來選中 users.mdb.你可以把數(shù)據(jù)庫放在任何位置,比如建立一個(gè)目錄來放吧: c:\inetsrv\wwwroot\users\users.mdb
圖二:連接數(shù)據(jù)庫,方法一
<% Conn.Open "ADOSamples" Set RS = Conn.Execute("SELECT * FROM TblUser") Do While Not RS.EOF . Response.Write(rs("USERNAME")) . . RS.MoveNext Loop RS.Close Conn.Close %>
連接數(shù)據(jù)庫 方法一
ASP提供兩種方法來訪問數(shù)據(jù)庫。在第一中方法中,你首先必須建立一個(gè)連接,之后,你可以加載任何合法的SQL語句。最后,關(guān)閉連接。 一些代碼你可以直接拿來用。圖二中,用?serDB1??SN,建立連接后,可以用Execute加載任何合法的SQL語句。之后,在一個(gè)循環(huán)中引用數(shù)據(jù)。必須注意的是,在最后一定要記住關(guān)閉連接。
圖三:連接數(shù)據(jù)庫 方法二
SUB Session_OnStart
'---- Open ADO connection to database
Conn.Open "UsersDB1", "userdblogin","userdbpassword"
END SUB
圖四:文件Global.asa 中用于連接的串
Conn.Open "UserDB1", "userdblogin","userdbpassword"
連接數(shù)據(jù)庫 方法二:
另外一種方法是在用戶的SESSION中建立連接。當(dāng)SESSION結(jié)束時(shí),關(guān)閉連接。這要用到文件Global.asa.每一個(gè)基于ASP的INTRANET應(yīng)用都可以有一個(gè)global.asa,它應(yīng)當(dāng)存放在這個(gè)應(yīng)用的根目錄下。在 global.asa 文件中可以定義四個(gè)事件處理程序,四個(gè)事件是:- Application-Start , Session-Start, Application-End 和 Session-End. 你可以在事件session-Start 中打開數(shù)據(jù)庫連接,在事件Session-End 中關(guān)閉連接。
在圖四中,用用戶名?serdblogin",口令"userdbpassword"建立了一個(gè)到DSN "UserDB1"的連接。在整個(gè)SESSION中都可以使用連接"Conn".
大家可以看例子default.asp 和文件global.asa.
圖五:取得表單元素的值.
Action = Request.Form("Action")
從表單中取得信息
在基于ASP的應(yīng)用中,你可以將ASP的例程代碼放在一個(gè)專門的文件中,然后在需要的地方用"include"包含進(jìn)來。圖五中取得表單元素"Action"的值
圖六:生成控制條
if Action = "" or Action= "ADD" then
CBar=CBar & " < td valign=top><input type=submit name=Action value=Add></td>"
CBar=CBar & "< td valign=top><input type=submit name=Action value=Edit></td>"
CBar=CBar & "<td valign=top><input type=submit name=Action value=Delete></td>"
end if
生成控制條
依照action的值,可以顯示不同的控件,發(fā)送不同的HTML文本到瀏覽器,圖六中的代碼表示,如果Action的值為空或?yàn)?ADD",就顯示控件?砑?,?嗉?,?境?。
圖七:插入記錄
sqlstr= "INSERT INTO TblUser " sqlstr= sqlstr & "(USERNAME, USERLOGIN, USERPASSWORD," sqlstr= sqlstr & " USERENTRYDATE, ACCESSID )VALUES " sqlstr= sqlstr & "('" & USERNAME & "','" & USERLOGIN & "','" sqlstr= sqlstr & "& USERPASSWORD & "',#" & datetoday & "#," & ACCESSID & ")"
插入記錄
在檢查了用戶輸入的各個(gè)表單域都合法時(shí),就可以往數(shù)據(jù)庫里插入記錄。我們使用的是SQL語句來完成這件事。注意我們用了VBSCRIPT的函數(shù) ForMatDateTime 來轉(zhuǎn)換日期成 "mm/dd/yy" 格式(見default.asp,譯注)。
圖八:查出所有記錄
sqlstr="SELECT * FROM TblUser ORDER BY USERNAME ASC" set rsUsers=Conn.Execute(sqlstr)
編輯記錄
為了編輯記錄,我用兩步實(shí)現(xiàn)。首先,查詢出所有記錄(只顯示姓名),并在每一條記錄旁顯示一個(gè)單選扭,當(dāng)用戶選了要編輯的記錄后,提交表單,然后才開始修改記錄。圖八中表示如何查詢出所有記錄。
圖九:更新記錄
size="4">
sqlstr= "UPDATE TblUser "
sqlstr= sqlstr & "SET USERNAME ='" & USERNAME & "', "
sqlstr= sqlstr & "USERLOGIN ='" & USERLOGIN & "', "
sqlstr= sqlstr & "USERPASSWORD ='" & USERPASSWORD & "', "
sqlstr= sqlstr & "USERENTRYDATE =#" & datetoday & "#, "
sqlstr= sqlstr & "ACCESSID =" & ACCESSID
sqlstr= sqlstr & " WHERE USERID=" & USERID & ";"
更新記錄
實(shí)際的修改是在圖九中用SQL實(shí)現(xiàn)的。
圖十:控制程序流向
<% if Action="EDI" or Action="DEL" then '---- Edit Mode do until rsUsers.EOF strUsers=strUsers & "<option value=" & rsUsers("USERID") & ">" & rsUsers("USERNAME") rsUsers.MoveNext loop %>
<tr><td valign=top>
<select name="USERID">
<%=strUsers%>
</select>
</td></tr>
<% end if %>
刪除記錄
為了刪除記錄,必須知道一個(gè)用戶的 USERID,圖十的代碼生成了一個(gè)下拉菜單供選擇。
下面是以上例子中用到的源代碼:(default.asp中的注釋已經(jīng)譯成中文,譯注)
default.asp global.asa
附:DSN(以下為譯者加上的)
在用ODBC時(shí),經(jīng)常見到DSN這個(gè)名詞,那它是什么意思呢?DSN即Data Souce Name的意思,數(shù)據(jù)源名。我們知道,ODBC是一種訪問數(shù)據(jù)庫的方法,只要系統(tǒng)中有相應(yīng)的ODBC驅(qū)動(dòng)程序,任何程序就可以通過ODBC操縱驅(qū)動(dòng)程序的數(shù)據(jù)庫。比如,我們系統(tǒng)中有ACCESS的ODBC驅(qū)動(dòng)程序,那我們不需要有ACCESS軟件,就可以在我們的程序,如VB編的,VC編的等,中間往一個(gè)ACCESS的MDB數(shù)據(jù)庫中加、刪、改記錄。而且我們根本不用知道這個(gè)數(shù)據(jù)庫是放在那里的。我們只要寫一些SQL語句就可以了。ODBC驅(qū)動(dòng)程序會(huì)幫我們做一切事情。我們在給ODBC驅(qū)動(dòng)程序傳SQL指令時(shí),用的即是DSN來告訴他到底操作的是哪一個(gè)數(shù)據(jù)庫。如果數(shù)據(jù)庫的平臺變了,比如我們改用了SQL SERVER的數(shù)據(jù)庫,只要其中表的結(jié)構(gòu)沒變,我們就不用改寫我們的程序,只要重新在系統(tǒng)中配置DSN就行了。我們的程序還根本不知道已經(jīng)換了人為他服務(wù)了呢。
由此可見,DSN是應(yīng)用程序和數(shù)據(jù)庫之間的橋梁,要通過ODBC訪問數(shù)據(jù)庫,前提就是,我們必須配置好DSN(即架好橋梁),從以上的我們可以看出,一個(gè)DSN必須包含一些信息,
DSN的名字,就是給這座橋取個(gè)名字,我們的程序中訪問數(shù)據(jù)庫時(shí),給系統(tǒng)傳的就是這個(gè)名字,而不是數(shù)據(jù)庫的實(shí)際名字。
用的是哪種ODBC驅(qū)動(dòng)程序,這樣子,在我們要操作數(shù)據(jù)庫時(shí),系統(tǒng)才會(huì)知道調(diào)哪個(gè)ODBC驅(qū)動(dòng)程序來服務(wù)。
數(shù)據(jù)庫,你必須指定這座橋到底連接的是哪個(gè)數(shù)據(jù)庫,這好象不用多說哦:),但不同的數(shù)據(jù)庫系統(tǒng),指定數(shù)據(jù)庫的名字方法有些不同,ACCESS的就是讓你選一個(gè)MDB文件。
這座橋是架在系統(tǒng)之中的,所以WIN95(NT)提供了一個(gè)工具來完成這件事,即是控制面板中的32 BIT ODBC,有三類DSN,用戶DSN,系統(tǒng)DSN,文件DSN,我們一般就用系統(tǒng)DSN,因?yàn)檫@樣可以讓所有人都使用這個(gè)DSN。
相關(guān)文章