本文介紹如何開啟 ADO 連線和 Recordset 物件。
原始產品版本:SQL Server
原始 KB 編號: 168336
摘要
ActiveX Data Objects (ADO) 提供數種方式來開啟 Connection 和 Recordset 物件。 本文提供每個物件的數種常見技術範例程序代碼。
其他相關資訊
有數種方式可以在 ADO 中開啟 Connection 物件:
- 將 屬性設定
ConnectionString
為有效的 Connect 字串,然後呼叫Open()
方法。 此 連接字串 是提供者相依的。 - 將有效的 Connect 字串傳遞至 方法的第一個自變數
Open()
。 - 將有效的 Command 對象傳遞至 Recordset Open 方法的第一個自變數。
- 將 ODBC 資料來源名稱和選擇性的使用者識別碼和密碼傳遞至 Connection Object 的
Open()
方法。
在 ADO 中開啟 Recordset 物件的方式有三種:
- 藉由開啟 Recordset 關閉
Connection.Execute()
方法。 - 藉由開啟 Recordset 關閉
Command.Execute()
方法。 - 開啟不含 Connection 或 Command 物件的 Recordset 物件,並將有效的 Connect 字串傳遞至 方法的第
Recordset.Open()
二個自變數。
此程式代碼假設Nwind.mdb是隨 Visual Basic 一起安裝,且位於 :C:\Program Files\DevStudio\VB directory
Option Explicit
Private Sub cmdOpen_Click()
Dim Conn1 As New adodb.Connection
Dim Cmd1 As New adodb.Command
Dim Errs1 As Errors
Dim Rs1 As New adodb.Recordset
Dim i As Integer
Dim AccessConnect As String
' Error Handling Variables
Dim errLoop As Error
Dim strTmp As String
AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
'---------------------------
' Connection Object Methods
'---------------------------
On Error GoTo AdoError ' Full Error Handling which traverses
' Connection object
' Connection Open method #1: Open via ConnectionString Property
Conn1.ConnectionString = AccessConnect
Conn1.Open
Conn1.Close
Conn1.ConnectionString = ""
' Connection Open method #2: Open("[ODBC Connect String]","","")
Conn1.Open AccessConnect
Conn1.Close
' Connection Open method #3: Open("DSN","Uid","Pwd")
Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
"DBQ=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
Conn1.Close
'--------------------------
' Recordset Object Methods
'--------------------------
' Don't assume that we have a connection object.
On Error GoTo AdoErrorLite
' Recordset Open Method #1: Open via Connection.Execute(...)
Conn1.Open AccessConnect
Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
Rs1.Close
Conn1.Close
' Recordset Open Method #2: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Set Rs1 = Cmd1.Execute
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #3: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Rs1.Open Cmd1
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #4: Open w/o Connection & w/Connect String
Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
Rs1.Close
Done:
Set Rs1 = Nothing
Set Cmd1 = Nothing
Set Conn1 = Nothing
Exit Sub
AdoError:
i = 1
On Error Resume Next
' Enumerate Errors collection and display properties of
' each Error object (if Errors Collection is filled out)
Set Errs1 = Conn1.Errors
For Each errLoop In Errs1
With errLoop
strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
strTmp = strTmp & vbCrLf & " Description " & .Description
strTmp = strTmp & vbCrLf & " Source " & .Source
i = i + 1
End With
Next
AdoErrorLite:
' Get VB Error Object's information
strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
strTmp = strTmp & vbCrLf & " Description " & Err.Description
MsgBox strTmp
' Clean up gracefully without risking infinite loop in error handler
On Error GoTo 0
GoTo Done
End Sub
錯誤注意事項
只有 ADO Connection 物件有錯誤集合。 觀察讀取器會注意到輕量型錯誤處理程式對範例有效 RecordSet.Open
。 如果開啟 RecordSet 物件時發生錯誤,ADO 應該會從 OLEDB 提供者傳回最明確的錯誤。 與上述程式代碼一起可能會遇到的一些常見錯誤。
如果您省略連接字串中的 DefaultDir 參數(或中有錯誤),您可能會收到下列錯誤:
ADO 錯誤 # -2147467259
描述 [Microsoft][ODBC Microsoft Access 97 Driver] '(unknown)'
不是有效的路徑。 請確定路徑名稱為
正確拼字,且您已連線到伺服器
檔案所在的位置。
來源Microsoft OLE DB Provider for ODBC Drivers
如果連接字串中的 Dbq 參數發生錯誤,您可能會收到下列錯誤:
ADO 錯誤 # -2147467259 描述 [Microsoft][ODBC Microsoft Access 97 驅動程式] 找不到檔案 '(unknown)'。
來源Microsoft OLE DB Provider for ODBC Drivers
錯誤也會以下列錯誤填入 Connection errors 集合:
ADO 錯誤 # -2147467259
描述 [Microsoft][ODBC 驅動程式管理員] 驅動程式的
SQLSetConnectAttr 失敗
來源Microsoft OLE DB Provider for ODBC Drivers
ADO 錯誤 # -2147467259
描述登入失敗
來源Microsoft OLE DB Provider for ODBC Drivers
注意
對於每個錯誤,ADO 錯誤號碼都相同,在此情況下會轉譯為 0x80004005,也就是一般E_FAIL錯誤訊息。 基礎元件沒有遇到條件的特定錯誤號碼,但有用的信息絕不會引發至 ADO。