在ASP程式設計裡,用來存取資料庫或表格資料的物件統稱 ADO(ActiveX Data Objects),這是一個 ASP 內建的資料庫存取元件,可以經由 JavaScript/JScript、VBScript 等語言來控制資料庫的存取,並可連接多種資料庫,包括 SQL Server、Oracle、Access 等支援ODBC的資料庫。ADO 主要包含 Connection、Recordset 及 Command 三種物件,本小節將介紹與 Connection 相關的資料庫操作。
使用 ADO 的 Connection 物件來進行資料庫的檢視查詢,主要有以下四個步驟:
- 建立資料庫連結,然後開啟資料庫:
使用「Server.CreateObject」定義一個 ADO 的 Connection 物件,然後使用其「Open」的方法來開啟資料庫來源,範例程式碼如下:
conn = Server.CreateObject("ADODB.Connection");
接著我們可以設定 conn 物件的 ConnectionString 性質來指定資料庫,共有四種作法:
- 直接指定 Access 資料庫在本機硬碟的路徑:
conn.ConnectionString = "DBQ=資料庫檔案;Driver={Microsoft Access Driver (*.mdb)};Driverld=25;FIL=MS Access;UID=**;PWD=**";
- 指定 DSN(資料來源名稱):
conn.ConnectionString = "資料來源名稱";
- 直接連結至 SQL Server 資料庫:
conn.ConnectionString = "Driver={SQL Server};Datebase=資料庫名稱;Server=位址;UID=**;PWD=**";
- 直接連結至 UNIX 的 MySQL 資料庫:
conn.ConnectionString = "Driver={MySQL};Datebase=資料庫名稱;Server=位址;UID=**;PWD=**";
使用以上任一方法即可連結到你想要連結的本機或遠端資料庫。最後再用 conn 物件的 Open 方法,來開啟資料庫:
conn.Open();
- 執行SQL指令,並將查詢結果儲存於 Recordset 中:若是檢視查詢,我們可將結果存至 RecordSet 物件變數「rs」中,以便後續取用,典型程式碼如下:
sql = "Select * from testTable";
rs = conn.Execute(sql);
以上的程式碼將 SQL 指令所查詢到的結果儲存到 Recordset 物件 rs 中。若不是檢視查詢,則不需要將結果存放於變數 rs。
- 取得欄位名稱及內容:若是檢視查詢,我們可以使用下列的的方式來取得欄位名稱及內容等資訊:
- rs.EOF:是否已指到最後一筆資料,是為True,反之為False
- rs.Fields.Count:RecordSets的欄位數
- rs(i).Name:第i個欄位的欄位名稱
- rs("欄位名稱"):讀取某個特定欄位名稱的資料
- rs(i):第i個欄位的資料
- rs.MoveNext:將指標移到下一筆
- rs.MovePrev:將指標移到上一筆
- rs.MoveFirst:將指標移到第一筆
- rs.MoveLast:將指標移到最後一筆
例如,若要印出欄位名稱,可以使用下列典型程式碼:
for (i=0; i");
若要印出每一筆資料的每一個欄位值,可以使用下列典型程式碼:
while (!rs.EOF){
for (i=0; i\n");
rs.MoveNext();
}
以上的程式碼由 rs(i) 讀取資料庫欄位的資料,rs.MoveNext() 將 Recordset 的資料指標移到下一筆,經由 rs.EOF 來判斷是否已到了最末筆資料,並配合 while 迴圈即可得到所有查詢結果的資料。
- 關閉 RecordSet 及資料庫連結:範例程式碼如下:
rs.Close();
conn.Close();
例如,我們可以在網頁中印出 Access 資料庫 asp/example/database/test.mdb 裡面的資料表 testTable 的內容:
上述範例的原始檔如下:
在上述範例中,我們使用「直接指定資料庫在本機硬碟的路徑」的方式來連結資料庫,其中的 SQL 指令「SELECT * FROM testTable」代表「從資料表 testTable 取出所有資料」。其它說明皆以註解的方式寫在程式碼中,所以在此不再贅述。若讀者對 VBScript 比較熟悉,也可以使用 VBScript 來進行類似的工作,其流程完全一樣,可參考此範例:asp/example/database/listdb01_vbs.asp。
若要使用 DSN 連結資料庫,首先我們必須先在伺服器設定 DSN(詳細流程請見上一小節),然後就可以在 ASP 內經由 DSN 來指定資料庫(可以是近端或是遠端)。以上一個範例而言,若要由 DSN 來連結資料庫,而不直接指定資料庫,只要把下一列敘述:
Conn.ConnectionString = "DBQ=" + Server.MapPath("test.mdb") + ";Driver={Microsoft Access Driver (*.mdb)};Driverld=25;FIL=MS Access;";
改成下一列即可:
Conn.ConnectionString = "dsn4test";
其中 dsn4test 必須已被設定為指向 test.mdb 的 ODBC 資料來源。相關 JScript 範例可見
asp/example/database/listdb02.asp,VBScript 範例則可見
asp/example/database/listdb02.asp。
對於資料庫的檢視和列印,是常被用到的功能,因此我們將此功能寫成一個函數 listQueryResult(),並存放於 listQueryResult.inc 中,其內容如下:
在上述原始碼中,我們分別寫了適用於 JScript 和 VBScript 的函數,因此無論是使用 JScript 或 VBScript 的 ASP 網頁,都可以使用此包含檔來列出資料庫查詢的結果。
使用上述的函數來進行資料庫列表,程式碼就會乾乾淨淨,範例如下:
其原始碼如下:
若使用 VBScript,則可見此範例:asp/example/database/listdb03_vbs.asp
前述的範例說明了如何進行資料庫的檢視查詢,並將結果顯示於 ASP 網頁。一般而言,SQL 指令已經具有對資料庫進行檢視、新增、修改、刪除等功能(後續兩小節有詳細說明),因此只要使用適當的 SQL 指令,再加上前述的方法,即可對資料庫進行完全的處理。
JScript 程式設計與應用:用於伺服器端的 ASP 環境