ADO(ActiveX Data Objects)是一種連接各種數據源并操縱數據的組件,它允許程序員在不考慮底層數據源類型的情況下處理數據。ADO 通過 OLE DB COM 接口提供了對許多數據庫的訪問支持,包括 Oracle。
Set Conn = CreateObject("ADODB.Connection")
ConnString = "Provider=MSDAORA.1;Password=my_password;" & _
"User ID=my_username;Data Source=my_DSN"
Conn.Open ConnString
不同的 Oracle 數據庫驅動程序提供了不同的數據源名稱(DSN),上面的例子使用 MSDAORA 驅動程序,數據源名稱為 my_DSN,用戶名和密碼分別為 my_username 和 my_password。
ADO 通過 Recordset 對象實現數據檢索和更新。一個 Recordset 對象類似于一個表,其中包含了一個或多個字段,并可以返回一些記錄。如果 Oracle 數據庫中有一個名為 customers 的表有一個名為 customer_name 的字段,可以使用以下代碼創建一個 Recordset 對象來檢索所有客戶姓名:
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 ' adUseClient
rs.Open "SELECT customer_name FROM customers", Conn, adOpenStatic, adLockOptimistic
While Not rs.EOF
MsgBox rs.Fields("customer_name").Value
rs.MoveNext
Wend
rs.Close
這里使用了 CursorLocation = 3 表示客戶端光標定位(client-side cursor),這種方式只有在數據比較小時才合適。如果連接的是一個較大的 Oracle 數據庫,應該使用服務器端游標(server-side cursor)。CursorType 參數決定了如何檢索記錄,CursorLocation 和 LockType 分別表示游標當前的位置和鎖定方式。
ADO 還提供了 Command 對象,可以用來執行 SQL 語句或存儲過程,并且可以返回影響的行數或數據集。以下代碼顯示了如何使用 Command 執行一個 DML(Data Manipulation Language)語句:
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandType = adCmdText
cmd.CommandText = "UPDATE customers SET customer_name = ? WHERE id = ?"
cmd.Parameters.Append cmd.CreateParameter("name", adVarChar, adParamInput, 255, "Tom")
cmd.Parameters.Append cmd.CreateParameter("id", adInteger, adParamInput, , 3)
cmd.Execute
上面的代碼使用了參數化查詢(parameterized query),這樣可以避免 SQL 注入攻擊,提高性能和安全性。
總之,ADO 提供了方便靈活的 API 來操作 Oracle 數據庫。不過,使用 ADO 應該要注意以下幾點:
- 應該及時關閉連接(conn.Close())和釋放對象(Set obj = Nothing),以避免內存泄露和資源浪費。
- 應該使用事務(conn.BeginTrans、conn.CommitTrans 和 conn.RollbackTrans)來實現 ACID(原子性、一致性、隔離性和持久性)。
- 應該測試性能和安全性。