打开 ADO 连接和 Recordset 对象
本文介绍如何打开 ADO 连接和 Recordset 对象。
原始产品版本:SQL Server
原始 KB 编号: 168336
摘要
ActiveX 数据对象 (ADO) 提供了多种打开 Connection 和 Recordset 对象的方法。 本文介绍每个对象的几种常见技术的示例代码。
更多信息
可通过多种方式在 ADO 中打开连接对象:
- 通过将 属性设置为
ConnectionString
有效的 Connect 字符串,然后调用Open()
方法。 此连接字符串依赖于提供程序。 - 通过将有效的 Connect 字符串传递给 方法的第一个参数
Open()
。 - 通过将有效的 Command 对象传递到 Recordset 的 Open 方法的第一个参数中。
- 通过将 ODBC 数据源名称以及用户 ID 和密码(可选)传递给 Connection 对象的
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 驱动程序] “ (未知) ”
不是有效路径。 确保路径名称为
拼写正确且已连接到服务器
文件所在的位置。
适用于 ODBC 驱动程序的源 Microsoft OLE DB 提供程序
如果连接字符串中的 Dbq 参数中存在错误,则可能会收到以下错误:
ADO 错误 # -2147467259 说明 [Microsoft][ODBC Microsoft Access 97 驱动程序] 找不到文件“ (未知) ”。
适用于 ODBC 驱动程序的源 Microsoft OLE DB 提供程序
上述错误还会使用以下错误填充 Connection 错误集合:
ADO 错误 # -2147467259
说明 [Microsoft][ODBC 驱动程序管理器] 驱动程序的
SQLSetConnectAttr 失败
适用于 ODBC 驱动程序的源 Microsoft OLE DB 提供程序
ADO 错误 # -2147467259
说明登录失败
适用于 ODBC 驱动程序的源 Microsoft OLE DB 提供程序
注意
对于每个错误,ADO 错误号都是相同的,在本例中转换为0x80004005,即泛型E_FAIL错误消息。 基础组件没有针对所遇到的条件的特定错误号,但向 ADO 提出了有用的信息。
References
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈