程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP入門教程 >> ASP講座之六:ASP與數據庫(一)

ASP講座之六:ASP與數據庫(一)

編輯:ASP入門教程
在前面幾講中,我們已經學習了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 對象從內存中刪除,以釋放資源
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對象檢索數據庫中的數據。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved