ASP與資料庫(一)

來源:互聯網
上載者:User
在前面幾講中,我們已經學習了ASP的基本內容,靈活使用這些知識,你已經可以使用ASP建立一個Web網站了。但一般來說,一個真正的、完整的網站是離不開資料庫的,因為少量的資料,如網頁訪問人數等完全可以儲存在文字檔中,但實際應用中,需要儲存的資料遠不止這一點點,而且這些資料之間往往還有關聯,利用資料庫來管理這些資料,可以很方便的查詢和更新。資料庫有很多種,如:Fox資料庫(.dbf)、Access資料庫(.mdb)、Informix、Oracle和SQL Server等等,在本講座中,我將以Microsoft Access資料庫和SQL Server 7.0為例來說明ASP是如何訪問資料庫的。為什麼選擇ASP呢?統計資料表明,SQL Server 7.0是當前最快、性價比最高的資料庫,而www.8848.net、www.dell.com、www.hotbot.com等許多大型的網站都是使用ASP技術建立的,所以ASP是比較容易掌握而且很實用的技術,你應該滿懷信心和勇氣地試著接近它、瞭解它,進而使用它。
在進一步學習之前,要做哪些準備:
1. 如果你沒有接觸過資料庫,建議先安裝Office中的Microsoft Access,瞭解一下資料庫的基本知識。
2. 最好安裝Microsoft SQL Server 7.0。一旦安裝好,立馬就可使用,不需要什麼設定,注意在Windows9.x中應安裝DeskTop版本,而7.0以前的版本只能安裝在NT Server中。
3. 接下來所討論的內容,需要一個叫做MDAC(Microsoft Data Access Components)的組件,這個組件已經包含在ASP中,如果你想瞭解更多的相關內容,或者下載最新的版本,可以訪問http://www.microsoft.com/data。

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

Response.Write Server.MapPath("\asp") & "\NorthWind.mdb;"  & "<br>"
Response.Write "資料庫連接成功: " & Cnn.State & "<br>"
' 3 - 使用 Connection 對象的 Close 方法關閉串連
Cnn.close
Response.Write "資料庫已經關閉: " & Cnn.State
' 4 - 將Connection 對象從記憶體中刪除,以釋放試?BR>Set Cnn = Nothing
%>
    Northwind.mdb是Microsoft Access97內建的一個樣本資料庫,一般位於目錄“Microsoft Office\Office\Samples”下,你可以自己找一下,然後將這個檔案拷至Web伺服器相應目錄下(本例中放在C:\InetPub\home\asp下)。
    在這裡,Server對象的MapPath方法將指定的虛擬路徑轉換為真實的檔案路徑,最終結果類似:C:\InetPub\home\asp\Northwind.mdb。
方法二:用OLE DB建立Microsoft Access串連,下面列出關鍵區段。
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資料庫建立串連
方法一:用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後指定資料庫名,Data Source後為機器名(即網路→屬性→標識中的電腦名稱)或IP地址(需要安裝DNS服務)。
方法二:
Set Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Driver={SQL Server};Server=ICBCZJP;UID=sa;PWD=;Database=pubs"
Cnn.Open StrCnn

除了上述的兩種方法之外,當然還可使用許多文章、資料中介紹的最經典的方法:使用ODBC產生串連。就是先在Web伺服器控制台的“ODBC Data Sources”中建立一個串連,然後在ASP中使用類似“StrCnn ="DSN=ADOCnn; UID = sa;PWD=;Database=pubs"”的連接字串。這裡不詳細介紹,一來這不是最好的方法,二來其他資料都介紹了該方法。
另外,有興趣可下載常式wuf42.asp看看如何使用Connection對象的ConnectionTimeout和ConnectionString屬性。

二、 資料庫從這裡起步——檢索資料庫中已存在的資料
現在假定你已有最基本的資料庫知識,知道如何使用Microsoft Access開啟Northwind.mdb中的“運貨商”表,看到表中儲存的幾條資料。現在問題是如何使用ASP在瀏覽器中顯示這些資料,下面介紹三種方法。
特別提醒:如果你的資料庫底子較薄,只要會使用第二種方法就行了,切不可貪多,以免走火入魔,切記!切記!

方法一:只使用 Connection 對象。例wuf43.asp
<% @LANGUAGE = VBScript %>
<% ' wuf43.asp
Option Explicit
'這一句是非常重要的, 它可以確保所看到的資料不是緩衝在用戶端的資料,
'而是伺服器端隨時更新過的最新資料
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 對象的 Execute 方法得到記錄集

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

'迴圈至記錄末尾 - 一行一行、一條記錄一條記錄的顯示
Do While Not rsTest.EOF    

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

'移到下一條記錄 - 這一句可千萬不能少 否則就陷入死迴圈
    rsTest.MoveNext       
Loop

'第四部分: 打掃戰場
Cnn.close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
這個例子是很簡單的,第三部分顯示資料是資料庫典型的輸出樣式,你可以參照以前所學的知識加上表格和顏色美化輸出結果。
    非初級使用者可以參考wuf44.asp看看Execute方法的完整使用。

方法二:通過建立 Recordset 對象——切記初學者只求掌握這種方法便夠了。
例:wuf45.asp,其他部分同wuf43.asp,關鍵在於程式的第二部分。
'第二部分: 通過建立 RecordSet 對象得到記錄集
Dim StrSQL, rsTest
'建立 Recordset 對象
Set rsTest = Server.CreateObject("ADODB.Recordset")

StrSQL = "Select 運貨商ID,電話,公司名稱 From 運貨商 Where 電話 = '(503) 555-9931'"
'將 Recordset 對象附加到串連 Cnn
Set rsTest.ActiveConnection = Cnn
'使用 Recordset 對象的 Open 方法開啟記錄集
rsTest.Open StrSQL
    現在讓我們看看Recordset對象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

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

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

'第四部分: 打掃戰場
rsTest.Close: Cnn.Close
Set rsTest = Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
分析:
1.首先看看關鍵句:
rsTest.Open "運貨商",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdTable
第一個參數可以是表名(如:運貨商),也可以是SQL語句(如wuf45.asp)。
第二個參數指定當前的串連。
第三個參數指示CursorType,確定提供者開啟 Recordset 時應該使用的遊標類型。這裡採用僅向前移動的遊標。
第四個參數指示LockType,確定提供者開啟 Recordset 時應該使用的鎖定(並發)類型。這裡指定為唯讀。
第五個參數與第一個參數相關,如本例中第一個參數為表名,則第五個參數使用adCmdTable,若第一個參數為SQL語句,則第該參數為adCmdText,如:
rsTest.Open "Select * From 運貨商",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdText
    我想不見得大部人都能真正搞懂這五個參數的意思,沒關係,剛開始只要照搬會用就行,以後我們會不斷接觸,熟了便能生巧。
    關於CursorType和LockType這兩個參數,將在下講詳細闡述,僅僅檢索資料只需按本例設定就可以了。
2.這五個參數,也可以利用Recordset對象的屬性來設定,如例wuf46.asp。
'第二部分: 通過建立 RecordSet 對象得到記錄集
Dim rsTest
Set rsTest = Server.CreateObject("ADODB.Recordset")
rsTest.ActiveConnection = Cnn
rsTest.CursorType = adOpenForwardOnly
rsTest.LockType = adLockReadOnly
rsTest.Open "運貨商", , , ,adCmdTable
3. 再看看這句:<!--#include file="adovbs.inc"-->。
(1) 因為使用了adOpenForwardOnly,adLockReadOnly,adCmdText這樣的常數,所以需要將adovbs.inc這個檔案包含進來。
(2) adovbs.inc這個檔案一般位於目錄Program Files\Common Files\SYSTEM\ADO下,你可將它拷至Web伺服器目前的目錄(本講下載包中也有該檔案)。
(3) 用記事本開啟這個檔案看一下,就明白為什麼需要這個檔案了。

方法三:通過引入 Command 對象——這個應該在你有能力的前提下研究。
<% @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

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

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

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

'第四部分: 打掃戰場

rsTest.Close: Cnn.Close
Set rsTest = Nothing: Set cmdTest=Nothing: Set Cnn = Nothing
%>
</BODY>
</HTML>
    關於Command 對象的使用以後還會在資料庫的深入編程中重點講解。

本講主要介紹了如何與資料庫連接並檢索資料庫資料,初學者難免會有點糊塗,切記,你只需要學會以下知識點即可:
1. 如何使用OLE DB與Microsoft Access資料庫建立串連;
2. 如何使用OLE DB與Microsoft SQL Server資料庫建立串連;
3. 如何通過建立Recordset對象檢索資料庫中的資料。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.