明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP知識(shí)講座6

[摘要]ASP與數(shù)據(jù)庫(kù)(一)在前面幾講中,我們已經(jīng)學(xué)習(xí)了ASP的基本內(nèi)容,靈活使用這些知識(shí),你已經(jīng)可以使用ASP建立一個(gè)Web站點(diǎn)了。但一般來說,一個(gè)真正的、完整的站點(diǎn)是離不開數(shù)據(jù)庫(kù)的,因?yàn)樯倭康臄?shù)據(jù),如網(wǎng)...

ASP與數(shù)據(jù)庫(kù)(一)

在前面幾講中,我們已經(jīng)學(xué)習(xí)了ASP的基本內(nèi)容,靈活使用這些知識(shí),你已經(jīng)可以使用ASP建立一個(gè)Web站點(diǎn)了。但一般來說,一個(gè)真正的、完整的站點(diǎn)是離不開數(shù)據(jù)庫(kù)的,因?yàn)樯倭康臄?shù)據(jù),如網(wǎng)頁(yè)訪問人數(shù)等完全可以存儲(chǔ)在文本文件中,但實(shí)際應(yīng)用中,需要保存的數(shù)據(jù)遠(yuǎn)不止這一點(diǎn)點(diǎn),而且這些數(shù)據(jù)之間往往還有關(guān)聯(lián),利用數(shù)據(jù)庫(kù)來管理這些數(shù)據(jù),可以很方便的查詢和更新。數(shù)據(jù)庫(kù)有很多種,如:Fox數(shù)據(jù)庫(kù)(.dbf)、Access數(shù)據(jù)庫(kù)(.mdb)、Informix、Oracle和SQL Server等等,在本講座中,我將以Microsoft Access數(shù)據(jù)庫(kù)和SQL Server 7.0為例來說明ASP是如何訪問數(shù)據(jù)庫(kù)的。為什么選擇ASP呢?統(tǒng)計(jì)數(shù)據(jù)表明,SQL Server 7.0是當(dāng)前最快、性價(jià)比最高的數(shù)據(jù)庫(kù),而www.8848.net、www.dell.com、www.hotbot.com等許多大型的網(wǎng)站都是使用ASP技術(shù)創(chuàng)建的,所以ASP是比較容易掌握而且很實(shí)用的技術(shù),你應(yīng)該滿懷信心和勇氣地試著接近它、了解它,進(jìn)而使用它。
在進(jìn)一步學(xué)習(xí)之前,要做哪些準(zhǔn)備:
1. 如果你沒有接觸過數(shù)據(jù)庫(kù),建議先安裝Office中的Microsoft Access,了解一下數(shù)據(jù)庫(kù)的基本知識(shí)。
2. 最好安裝Microsoft SQL Server 7.0。一旦安裝好,立馬就可使用,不需要什么設(shè)置,注意在Windows9.x中應(yīng)安裝DeskTop版本,而7.0以前的版本只能安裝在NT Server中。
3. 接下來所討論的內(nèi)容,需要一個(gè)叫做MDAC(Microsoft Data Access Components)的組件,這個(gè)組件已經(jīng)包含在ASP中,如果你想了解更多的相關(guān)內(nèi)容,或者下載最新的版本,可以訪問http://www.microsoft.com/data。

一、 與數(shù)據(jù)庫(kù)建立連接
在正式開始之前,先介紹一下ADO--ActiveX Data Objects,剛接觸這個(gè)概念,你只要把ADO看作ASP與數(shù)據(jù)庫(kù)之間的橋梁就可以了。
(一) 與Microsoft Access數(shù)據(jù)庫(kù)建立連接
方法一:例wuf40.asp
<% @LANGUAGE = VBScript %>
<% ' wuf40.asp
Option Explicit
Dim Cnn, StrCnn
' 1 - 創(chuàng)建 Connection 對(duì)象
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\asp") & "\NorthWind.mdb;"
' 2 - 使用 Connection 對(duì)象的 Open 方法打開數(shù)據(jù)庫(kù)
Cnn.Open StrCnn

Response.Write Server.MapPath("\asp") & "\NorthWind.mdb;" & "<br>"
Response.Write "數(shù)據(jù)庫(kù)連接成功: " & Cnn.State & "<br>"
' 3 - 使用 Connection 對(duì)象的 Close 方法關(guān)閉連接
Cnn.close
Response.Write "數(shù)據(jù)庫(kù)已經(jīng)關(guān)閉: " & Cnn.State
' 4 - 將Connection 對(duì)象從內(nèi)存中刪除,以釋放資源
Set Cnn = Nothing
%>
Northwind.mdb是Microsoft Access97自帶的一個(gè)示例數(shù)據(jù)庫(kù),一般位于目錄"Microsoft Office\Office\Samples"下,你可以自己找一下,然后將這個(gè)文件拷至Web服務(wù)器相應(yīng)目錄下(本例中放在C:\InetPub\home\asp下)。
在這里,Server對(duì)象的MapPath方法將指定的虛擬路徑轉(zhuǎn)換為真實(shí)的文件路徑,最終結(jié)果類似:C:\InetPub\home\asp\Northwind.mdb。
方法二:用OLE DB創(chuàng)建Microsoft Access連接,下面列出關(guān)鍵部分。
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Inetpub\home\asp\Northwind.mdb"
Cnn.Open StrCnn

(二) 與SQL Server數(shù)據(jù)庫(kù)建立連接
方法一:用OLE DB連接SQL Server,詳見例程wuf41.asp。
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider=sqloledb; User ID=sa; Password=; Initial Catalog=pubs; Data Source=ICBCZJP"
Cnn.Open StrCnn 
Initial Catalog后指定數(shù)據(jù)庫(kù)名,Data Source后為機(jī)器名(即網(wǎng)絡(luò)→屬性→標(biāo)識(shí)中的計(jì)算機(jī)名)或IP地址(需要安裝DNS服務(wù))。
方法二:
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Driver={SQL Server};Server=ICBCZJP;UID=sa;PWD=;Database=pubs"
Cnn.Open StrCnn

除了上述的兩種方法之外,當(dāng)然還可使用許多文章、資料中介紹的最經(jīng)典的方法:使用ODBC生成連接。就是先在Web服務(wù)器控制面板的"ODBC Data Sources"中建立一個(gè)連接,然后在ASP中使用類似"StrCnn ="DSN=ADOCnn; UID = sa;PWD=;Database=pubs""的連接字符串。這里不詳細(xì)介紹,一來這不是最好的方法,二來其他資料都介紹了該方法。
另外,有興趣可下載例程wuf42.asp看看如何使用Connection對(duì)象的ConnectionTimeout和ConnectionString屬性。 二、 數(shù)據(jù)庫(kù)從這里起步--檢索數(shù)據(jù)庫(kù)中已存在的數(shù)據(jù)
現(xiàn)在假定你已有最基本的數(shù)據(jù)庫(kù)知識(shí),知道如何使用Microsoft Access打開Northwind.mdb中的"運(yùn)貨商"表,看到表中儲(chǔ)存的幾條數(shù)據(jù)。現(xiàn)在問題是如何使用ASP在瀏覽器中顯示這些數(shù)據(jù),下面介紹三種方法。
特別提醒:如果你的數(shù)據(jù)庫(kù)底子較薄,只要會(huì)使用第二種方法就行了,切不可貪多,以免走火入魔,切記!切記!

方法一:只使用 Connection 對(duì)象。例wuf43.asp
<% @LANGUAGE = VBScript %>
<% ' wuf43.asp
Option Explicit
'這一句是非常重要的, 它可以確保所看到的數(shù)據(jù)不是緩存在客戶端的數(shù)據(jù), 
'而是服務(wù)器端隨時(shí)更新過的最新數(shù)據(jù)
Response.Expires = 0

'第一部分: 建立連接

Dim Cnn, StrCnn
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Inetpub\home\asp\Northwind.mdb"
Cnn.Open StrCnn

'第二部分: 使用 Connection 對(duì)象的 Execute 方法得到記錄集

Dim StrSQL, rsTest
'下面是一句SQL語(yǔ)句(結(jié)構(gòu)化查詢語(yǔ)句), 本講座不具體介紹
'建議找本書看看,基本使用還是比較簡(jiǎn)單的,一學(xué)就會(huì)
'這一句的意思是從 運(yùn)貨商 表中選出所有的數(shù)據(jù)
StrSQL = "Select * From 運(yùn)貨商"
Set rsTest = Cnn.Execute(StrSQL)
%>
<HTML>
<BODY>
<% '第三部分: 將得到的記錄集顯示到瀏覽器上

'循環(huán)至記錄末尾 - 一行一行、一條記錄一條記錄的顯示
Do While Not rsTest.EOF 

'下面這兩行的作用是一樣的, 即 rsTest("運(yùn)貨商ID") 等同于 rsTest(0)
Response.Write rsTest("運(yùn)貨商ID") & " " & rsTest("公司名稱") & " " & rsTest("電話") & " " & "<BR>"
'Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"

'移到下一條記錄 - 這一句可千萬不能少 否則就陷入死循環(huán)
rsTest.MoveNext 
Loop

'第四部分: 打掃戰(zhàn)場(chǎng)
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
這個(gè)例子是很簡(jiǎn)單的,第三部分顯示數(shù)據(jù)是數(shù)據(jù)庫(kù)典型的輸出樣式,你可以參照以前所學(xué)的知識(shí)加上表格和顏色美化輸出結(jié)果。
非初級(jí)用戶可以參考wuf44.asp看看Execute方法的完整使用。

方法二:通過創(chuàng)建 Recordset 對(duì)象--切記初學(xué)者只求掌握這種方法便夠了。
例:wuf45.asp,其他部分同wuf43.asp,關(guān)鍵在于程序的第二部分。
'第二部分: 通過創(chuàng)建 RecordSet 對(duì)象得到記錄集
Dim StrSQL, rsTest
'創(chuàng)建 Recordset 對(duì)象
Set rsTest = Server.CreateObject("ADODB.Recordset")

StrSQL = "Select 運(yùn)貨商ID,電話,公司名稱 From 運(yùn)貨商 Where 電話 = '(503) 555-9931'"
'將 Recordset 對(duì)象附加到連接 Cnn
Set rsTest.ActiveConnection = Cnn
'使用 Recordset 對(duì)象的 Open 方法打開記錄集
rsTest.Open StrSQL
現(xiàn)在讓我們看看Recordset對(duì)象Open方法的完整用法,例wuf48.asp。
<% @LANGUAGE = VBScript %>
<% ' wuf48.asp
Option Explicit
Response.Expires = 0
%>
<!--#include file="adovbs.inc"-->
<%
'第一部分: 建立連接
Dim Cnn, StrCnn
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Inetpub\home\asp\Northwind.mdb"
Cnn.Open StrCnn

'第二部分: 通過創(chuàng)建 RecordSet 對(duì)象得到記錄集
Dim rsTest
Set rsTest = Server.CreateObject("ADODB.Recordset")

rsTest.Open "運(yùn)貨商",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdTable
%>
<HTML>
<BODY>
<% '第三部分: 將得到的記錄集顯示到瀏覽器上
Do While Not rsTest.EOF 
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext 
Loop

'第四部分: 打掃戰(zhàn)場(chǎng)
rsTest.Close: Cnn.Close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
分析:
1.首先看看關(guān)鍵句:
rsTest.Open "運(yùn)貨商",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdTable
第一個(gè)參數(shù)可以是表名(如:運(yùn)貨商),也可以是SQL語(yǔ)句(如wuf45.asp)。
第二個(gè)參數(shù)指定當(dāng)前的連接。
第三個(gè)參數(shù)指示CursorType,確定提供者打開 Recordset 時(shí)應(yīng)該使用的游標(biāo)類型。這里采用僅向前移動(dòng)的游標(biāo)。
第四個(gè)參數(shù)指示LockType,確定提供者打開 Recordset 時(shí)應(yīng)該使用的鎖定(并發(fā))類型。這里指定為只讀。
第五個(gè)參數(shù)與第一個(gè)參數(shù)相關(guān),如本例中第一個(gè)參數(shù)為表名,則第五個(gè)參數(shù)使用adCmdTable,若第一個(gè)參數(shù)為SQL語(yǔ)句,則第該參數(shù)為adCmdText,如:
rsTest.Open "Select * From 運(yùn)貨商",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdText
我想不見得大部人都能真正搞懂這五個(gè)參數(shù)的意思,沒關(guān)系,剛開始只要照搬會(huì)用就行,以后我們會(huì)不斷接觸,熟了便能生巧。
關(guān)于CursorType和LockType這兩個(gè)參數(shù),將在下講詳細(xì)闡述,僅僅檢索數(shù)據(jù)只需按本例設(shè)置就可以了。
2.這五個(gè)參數(shù),也可以利用Recordset對(duì)象的屬性來設(shè)置,如例wuf46.asp。
'第二部分: 通過創(chuàng)建 RecordSet 對(duì)象得到記錄集
Dim rsTest
Set rsTest = Server.CreateObject("ADODB.Recordset")
rsTest.ActiveConnection = Cnn
rsTest.CursorType = adOpenForwardOnly
rsTest.LockType = adLockReadOnly
rsTest.Open "運(yùn)貨商", , , ,adCmdTable
3. 再看看這句:<!--#include file="adovbs.inc"-->。
(1) 因?yàn)槭褂昧薬dOpenForwardOnly,adLockReadOnly,adCmdText這樣的常數(shù),所以需要將adovbs.inc這個(gè)文件包含進(jìn)來。
(2) adovbs.inc這個(gè)文件一般位于目錄Program Files\Common Files\SYSTEM\ADO下,你可將它拷至Web服務(wù)器當(dāng)前目錄(本講下載包中也有該文件)。
(3) 用記事本打開這個(gè)文件看一下,就明白為什么需要這個(gè)文件了。

方法三:通過引入 Command 對(duì)象--這個(gè)應(yīng)該在你有能力的前提下研究。
<% @LANGUAGE = VBScript %>
<% ' wuf47.asp
Option Explicit
Response.Expires = 0
%>
<!--#include file="adovbs.inc"-->
<%
'第一部分: 建立連接
Dim Cnn, StrCnn
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Inetpub\home\asp\Northwind.mdb"
Cnn.Open StrCnn

'第二部分: 通過創(chuàng)建 Command 對(duì)象得到記錄集
Dim StrSQL, rsTest, cmdTest
'創(chuàng)建 Command 對(duì)象
Set cmdTest = Server.CreateObject("ADODB.Command")

StrSQL = "SELECT MAX(數(shù)量) FROM 訂單明細(xì)"
cmdTest.CommandText = StrSQL
cmdTest.CommandType = adCmdText '表明命令類型為 SQL 語(yǔ)句
Set cmdTest.ActiveConnection = Cnn
'使用 Command 對(duì)象的 Execute 方法得到記錄集。
Set rsTest = cmdTest.Execute
%>
<HTML>
<BODY>
<% '第三部分: 將得到的記錄集顯示到瀏覽器上

Do While Not rsTest.EOF 
Response.Write rsTest(0) & "<BR>"
rsTest.MoveNext 
Loop

'第四部分: 打掃戰(zhàn)場(chǎng)

rsTest.Close: Cnn.Close
Set rsTest = Nothing: Set cmdTest=Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
關(guān)于Command 對(duì)象的使用以后還會(huì)在數(shù)據(jù)庫(kù)的深入編程中重點(diǎn)講解。

本講主要介紹了如何與數(shù)據(jù)庫(kù)連接并檢索數(shù)據(jù)庫(kù)數(shù)據(jù),初學(xué)者難免會(huì)有點(diǎn)糊涂,切記,你只需要學(xué)會(huì)以下知識(shí)點(diǎn)即可:
1. 如何使用OLE DB與Microsoft Access數(shù)據(jù)庫(kù)建立連接;
2. 如何使用OLE DB與Microsoft SQL Server數(shù)據(jù)庫(kù)建立連接;
如何通過創(chuàng)建Recordset對(duì)象檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù)。



標(biāo)簽:ASP知識(shí)講座6