ADO 簡介
在 ASP 中訪問數據庫使用的 ADO 組件。
- ADO 是一項微軟的技術。
- ADO 指 ActiveX 數據對象(ActiveX Data Objects)。
- ADO 是微軟的 Active-X 組件。
- ADO 會隨 IIS 被自動安裝
- ADO 是一個訪問數據庫中數據的編程接口
從 ASP 頁面訪問數據的方法
- 創建一個到數據庫的 ADO 連接
- 打開數據庫連接
- 創建 ADO 記錄集
- 從記錄集提取您需要的數據
- 關閉記錄集
- 關閉連接
ADO 數據庫連接
在進行數據訪問前,我們首先先要建立和數據庫的連接,ADO 通過 OLE DB 可以與許多數據庫建立連接,ADO 中的 Connection 對象用於建立和數據庫的連接。
在連接之前,我們需要建立一個數據連接字符串,請詳細學習上一篇第二十一講:
ASP入門(二十一) - 如何自己獲取 ADO 連接字符串
連接字符串中 Data Source 一定要用 Sever.MapPath 方法來轉化為服務器上絕對路徑。
加入了錯誤捕獲代碼(StartConnect.asp),連接數據庫出現錯誤時,及時給用戶友好的提示並終止頁面的繼續運行。代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% '如果遇到錯誤,則不理會繼續執行 On Error Resume Next Dim oConn, sConnString, sDBPath '數據庫路徑及文件名 sDBPath = "1NorthWind.mdb" '數據庫連接字符串 sConnString = "Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" & Server.MapPath(sDBPath) '建立 Connection 對象的實例 oConn Set oConn = Server.CreateObject("ADODB.Connection") '調用 oConn 的 Open 方法打開連接 oConn.Open sConnString '檢測是否出錯 Dim ErrInfo If Err Then Err.Clear '清空錯誤 ErrInfo = "數據庫連接出現錯誤,請聯系管理員!<br>" ErrInfo = ErrInfo & "終止頁面繼續運行" End If %>
我們已經建立了數據庫連接,但是我們的網站中,會有很多文件都涉及到數據的操作,因此將數據庫連接代碼單獨放置在一個文件(conn.asp)中,並將該文件放置到 根目錄下的 include 目錄中,數據庫文件放置到 database 目錄中,然后每個需要操作數據庫的頁面中,使用 #include file 代碼來進行引入,如下代碼:
<!--#include file="../include/conn.asp" -->
執行 SQL 命令
Connect 對象提供了 Execute 方法來執行 SQL 語句,代碼如下:
<!--#include file="../include/conn.asp" --> <% Dim sql, RA sql = "DELETE FROM [運貨商] WHERE [公司名稱]='聯邦貨運'" oConn.Execute sql, RA 'RA返回的受影響的記錄數,如果成功刪除則顯示 > 0 oConn.Close Set oConn = Nothing %>
我們的 Execute 方法后面多了一個 RA 參數,這個參數可以返回受影響的記錄數。通過這個記錄數來判斷是否正確執行完 DELETE 任務。
小案例——查詢並得到記錄集
這里我們將用到 Recordset 對象,該對象代表從查詢返回的記錄和那些記錄的指針。‘
我們的例子將顯示產品表中的名稱、單位數量、單價信息,在 Access 中打開的數據表,所見到的結果如下:
在 ASP 頁面中,我們通過輸出 HTML 表格來顯示這些信息,代碼(ShowProducts.asp)如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>顯示 Northwind 表中 產品 表信息</title> </head> <body> <!--#include file="../include/conn.asp"--> <% Dim oRs, sql sql = "SELECT * FROM [產品]" Set oRs = Server.CreateObject("ADODB.Recordset") oRs.Open sql, oConn %> <h3>顯示 Northwind 表中 產品 表信息</h3> <table border="1"> <tr> <th>編號</th> <th>產品名稱</th> <th>單位數量</th> <th>單價</th> </tr> <% Dim num num = 1 Do While NOT oRs.EOF '判斷是否處於記錄集的最末端 %> <tr> <td><%=num%></td> <td><%=oRs("產品名稱")%></td> <td><%=oRs("單位數量")%></td> <td><%=oRs("單價")%></td> </tr> <% num = num + 1 oRs.MoveNext '下一條記錄 Loop '結束循環 Do While '關閉連接、清空對象 oRs.Close Set oRs = Nothing oConn.Close Set oConn = Nothing %> </table> </body> </html>
顯示結果如下: