跳轉到內容

活動伺服器頁面/使用 ADO 進行資料庫訪問

來自華夏公益教科書
上一頁:函式和子例程 索引 下一頁:伺服器端包含

本文描述了使用 ADO(ActiveX 資料物件)進行資料庫連線,以及如何使用它來與資料庫伺服器通訊和管理。您將學習如何開啟到資料庫的連線,執行插入更新刪除選擇語句,以及執行儲存過程。

活動伺服器頁面作為一種指令碼語言,是一種無狀態語言。這意味著它不會在頁面載入之間保留應用程式的狀態。幾乎所有 ASP 託管解決方案都將包含某種資料庫託管。最常見的是 MySQL,其次是 Microsoft SQL Server。無論您使用什麼資料庫,ADO 都允許您透過活動伺服器頁面管理資料庫。

雖然您可以在Application物件中儲存持久資料是正確的。這基本上只是儲存在記憶體快取中,每當 IIS 或伺服器重新啟動時就會被清除。當嘗試建立將在伺服器叢集中使用的應用程式時,它也會導致問題(其中每個叢集都有其自己的應用程式快取版本。)

連線到資料庫

[編輯 | 編輯原始碼]

以下是一個示例,展示如何開啟到資料庫的連線。為此,我們呼叫Server.CreateObject來建立內建 ADODB Connection 物件的例項。這不僅用於建立到資料庫的初始連線,還將用於在稍後建立記錄集命令物件

您需要將文字mysqlusermysqlpassmysqldbname替換為資料庫的正確值。請注意,這是使用 ODBC 訪問本地伺服器(localhost)上的 MySQL 伺服器。

' create a connection object
Set oConnection = Server.CreateObject("ADODB.Connection")

' open a connection to a data source
oConnection.Open "Driver={MySQL ODBC 3.51 Driver};server=localhost;port=3306;uid=mysqluser;pwd=mysqlpass;database=mysqldbname;Option=16384"

請注意,您可以將此語句用On Error塊包裝以捕獲可能發生的任何異常。

插入、更新和刪除

[編輯 | 編輯原始碼]

以下將使用ADODB.Connection物件對資料庫執行插入查詢。無論您執行插入更新還是刪除,程式碼都是相同的。您只需要使用修改後的查詢更改sQuery變數。

' build the query to run
sQuery ="INSERT INTO Company VALUES ("Microsoft")"

' execute the insert statement
oConnection.Execute sQuery, nRecordsAffected, adCmdText + adExecuteNoRecords

Response.Write "Records Affected: " & nRecordsAffected

常量adCmdTextadExecuteNoRecordsADO 常量部分中描述。

以下程式碼可用於對資料庫執行選擇語句。您必須首先使用連線到資料庫部分中描述的程式碼開啟到資料庫的連線。

sQuery = "SELECT companyid, companyname FROM tblCompany"

' create the recordset object to hold the result sets
Set rs = Server.CreateObject("ADODB.Recordset")

' set the number of records to fetch into memory at once (performance)
rs.CacheSize = 256

' execute the query and populate the recordset 
rs.Open sQuery, oConnection, adOpenKeySet, adLockReadOnly, adCmdText

'More examples of SELECT (based on criteria) are:
'*example 1.
sQuery = "SELECT companyid, companyname FROM tblCompany WHERE companyid = 1" '1. See details below
  • 1. 當上述程式碼段中的 sQuery 設定為示例 1 時,它將獲取 companyid 值為 1 的記錄,在此 SQL 語句中,WHERE 子句用於定義該條件。

常量adOpenKeySetadLockReadOnlyadCmdTextADO 常量部分中描述。現在您已經打開了記錄集,您可以用它做什麼?

檢索記錄集

[編輯 | 編輯原始碼]

以下程式碼將向您展示如何使用選擇部分中描述的記錄集物件(rs)從您的資料庫查詢中檢索值。

' EOF checks for the end of a recordset
If Not rs.EOF Then
	' The Fields collection accesses fields from a single record
	sFirstName = rs.Fields("firstname").Value
	
	' You can enumerate all fields in the record
	For Each oFld In rs.fields
		Response.Write "Field = " & oFld.Name & "<br>"
		Response.Write "Value = " & oFld.Value & "<br>"
	Next
End If
		
' You can also loop through all records
Do Until rs.EOF
	Response.Write "Name = " & rs.Fields("firstname").Value & "<br>"
	' make sure you don't forget this next step
	' MoveNext will move to the next record in the resultset
	rs.MoveNext
Loop

' following is always a good idea to clean up resources ASAP
rs.Close : rs = 0

關閉資料庫連線

[編輯 | 編輯原始碼]

完成對資料庫的訪問後,您應該始終關閉資料庫連線。這不是必需的,但始終是一個好主意。

' it's a good idea to close your recordset first (if necessary)
rs.Close : rs = 0

' this will close the database connection 
oConnection.Close

ADO 常量

[編輯 | 編輯原始碼]
變數 目的
'adOpenKeySet 開啟一個鍵集
Const adOpenKeySet = 1
adLockReadOnly 建立資料庫鎖,以便對錶進行只讀訪問。這是一個只向前游標,它提供檢索結果的最有效方法。
Const adLockReadOnly = 1
adLockPessimistic 這種鎖定方法將在對資料庫進行編輯後立即鎖定資料庫記錄。(在活動伺服器頁面中實際上不使用)
Const adLockPessimistic = 2
adLockOptimistic 對資料庫記錄使用樂觀記錄鎖定。這意味著只有在記錄被修改並且編輯提交回資料庫時才會鎖定記錄。(在活動伺服器頁面中實際上不使用)
Const adLockOptimistic = 3
adCmdText 表示傳遞的 SQL 命令是文字(SQL 語句)
Const adCmdText = 1
adCmdTable 表示傳遞的 SQL 命令是要開啟的資料庫表的名稱(所有行和欄位)
Const adCmdTable = 2
adCmdStoredProc 表示傳遞的 SQL 命令是要執行的儲存過程的名稱。使用此呼叫時,必須單獨定義引數。
Const adCmdStoredProc = 4
adCmdUnknown 表示傳遞的 SQL 命令未知 - ADO 庫將盡其所能來解釋意圖的命令型別。
Const adCmdUnknown = 8
adStateOpen 表示結果集的當前狀態。這表示記錄集已開啟,可以執行資料檢索操作。
Const adStateOpen = 1
adStateClosed 表示結果集的當前狀態。這表示記錄集已關閉,禁止資料檢索。
Const adStateClosed = 0
adExecuteNoRecords 表示不返回記錄集。SQL 命令是儲存過程呼叫、插入更新刪除語句。
Const adExecuteNoRecords = 128
adParamInput 儲存過程引數是輸入(這是預設值),這意味著我們只是將資料傳遞到過程。
Const adParamInput = 1
adParamOutput 儲存過程引數是輸出,這意味著資料將由過程返回。
Const adParamOutput = 2
adParamInputOutput 儲存過程引數既是輸入又是輸出。資料被傳遞到過程,然後在執行完成後返回。
Const adParamInputOutput = 3
adParamReturnValue 表示變數儲存來自過程的返回值
Const adParamReturnValue = 4
adVarChar 可變字元(字串)SQL 資料型別
Const adVarChar = 200
adChar 固定長度字元 SQL 資料型別
Const adChar = 129
adInteger 整數 SQL 資料型別
Const adInteger = 3
adCurrency 貨幣 SQL 資料型別
Const adCurrency = 6

使用 ADODB 是透過活動伺服器頁面連線到資料庫的理想方式。ADODB 利用ODBCOLE DB技術連線到資料庫,具體取決於您在使用ADODB.Connection::Open方法時使用的連線字串。最有效的訪問方法是OLE DB

您可以選擇建立一個數據庫庫程式碼來簡化與資料庫互動的任務。您可以建立一個數據庫類,它管理與資料庫通訊的所有任務。將此與儲存在global.asa檔案中的資料庫配置設定相結合,您將擁有一個快速而強大的執行資料庫查詢的方式。

確保使用 ADO 常量來最有效地使用 ADO 方法和您的資料庫伺服器。上面的示例應該提供您與資料庫互動所需的一切。

複習問題

[編輯 | 編輯原始碼]
  • ADO 代表什麼?
  • 使用哪個物件連線到資料庫?
  • 使用什麼方法連線到資料庫?
  • 您需要哪個物件才能從選擇中檢索結果?
  • 如何從當前記錄中檢索欄位的值?
  • 如何列舉記錄中的所有欄位
  • 如何關閉到資料庫的連線
  • 編寫程式碼以執行INSERTUPDATEDELETE查詢
  • 編寫程式碼以執行儲存過程?
  • 編寫程式碼以執行SELECT語句並讀取其結果
上一頁:函式和子例程 索引 下一頁:伺服器端包含
華夏公益教科書