ADO 数据库连接
ADO 数据库连接简介
ADO(ActiveX Data Objects)是 Microsoft 提供的一种基于 COM 的技术,用于通过 OLE DB 或 ODBC 提供程序连接和操作数据库(如 Microsoft Access、SQL Server、MySQL 等)。ADO 的 Connection 对象 是数据库操作的核心,用于建立与数据库的连接、管理事务和执行简单的 SQL 命令。它广泛应用于经典 ASP、VBA、VB6 和 Python(通过 pywin32
)等环境中。
本教程聚焦 ADO 的数据库连接,涵盖配置、连接字符串、示例代码,并结合上下文(如 REST API、ChromeDriver、Cron、Traefik、Python 列表推导式等)提供实用场景。
一、ADO Connection 对象
- 作用:建立与数据库的连接,管理会话。
- 关键属性:
ConnectionString
:指定数据库类型、路径、认证信息等。Provider
:选择数据提供程序(如Microsoft.Jet.OLEDB.4.0
)。State
:连接状态(1=打开,0=关闭)。- 关键方法:
Open()
:打开连接。Close()
:关闭连接。Execute()
:执行 SQL 语句。BeginTrans()
、CommitTrans()
、RollbackTrans()
:事务管理。- 常见提供程序:
- Access:
Microsoft.Jet.OLEDB.4.0
或Microsoft.ACE.OLEDB.12.0
。 - SQL Server:
SQLOLEDB
或SQL Server Native Client
。 - ODBC:
MSDASQL
.
二、连接字符串
连接字符串是 ADO 连接数据库的核心,格式为键值对,常见参数包括:
Provider
:数据提供程序。Data Source
:数据库文件路径或服务器地址。User ID
和Password
:认证信息(若需要)。Initial Catalog
:指定数据库名称(SQL Server)。
常见连接字符串示例:
- Microsoft Access:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb
或(较新版本):
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Northwind.accdb
- SQL Server:
Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;User ID=sa;Password=your_password
- ODBC 驱动:
Provider=MSDASQL;Driver={SQL Server};Server=localhost;Database=Northwind;Uid=sa;Pwd=your_password
查找连接字符串:
- 参考网站:https://www.connectionstrings.com/
- 确保提供程序与数据库版本兼容。
三、基本连接示例
1. 经典 ASP(VBScript)
<%
' 创建 Connection 对象
Set conn = Server.CreateObject("ADODB.Connection")
' 设置连接字符串
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb"
' 打开连接
conn.Open
' 测试连接
If conn.State = 1 Then
Response.Write "连接成功!"
Else
Response.Write "连接失败:" & conn.Errors(0).Description
End If
' 关闭连接
conn.Close
Set conn = Nothing
%>
- 调试(类似 console.log):使用
Response.Write
输出错误或状态。 - 错误处理:
On Error Resume Next
conn.Open
If Err.Number <> 0 Then Response.Write "错误:" & Err.Description
2. Python(通过 pywin32)
安装 pywin32
(推荐国内镜像):
pip install pywin32 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
示例:
import win32com.client
# 创建 Connection 对象
conn = win32com.client.Dispatch("ADODB.Connection")
# 设置连接字符串
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Northwind.mdb"
# 打开连接
try:
conn.Open()
print("连接成功!")
except Exception as e:
print(f"连接失败:{e}")
# 关闭连接
conn.Close()
四、结合上下文的应用
- 结合 REST API:
- 在 ASP 中,使用 ADO 连接数据库并返回 JSON 数据。
asp <% Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb" Set rs = conn.Execute("SELECT * FROM Customers") Response.ContentType = "application/json" Response.Write "[" Do Until rs.EOF Response.Write "{""name"":""" & rs("CompanyName") & """}" rs.MoveNext If Not rs.EOF Then Response.Write "," Loop Response.Write "]" conn.Close %>
- Python 替代:使用
pyodbc
或sqlalchemy
更现代。
- 结合 ChromeDriver 和 Selenium:
- 测试 ASP 页面(由 ADO 提供数据)。
python from selenium.webdriver import Chrome driver = Chrome() driver.get('http://localhost/test.asp') # ASP 使用 ADO 连接数据库 print(driver.find_element(By.TAG_NAME, 'body').text) driver.quit()
- 结合 Linux Cron(Windows 任务计划程序):
- 在 Windows 下,定时运行 Python 脚本(通过 ADO 查询数据库)。
python import win32com.client from tqdm import tqdm # 进度条 conn = win32com.client.Dispatch("ADODB.Connection") conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Northwind.mdb") rs = conn.Execute("SELECT * FROM Customers") names = [rs.Fields("CompanyName").Value for _ in tqdm(range(rs.RecordCount), desc="Processing") if not rs.EOF and (rs.MoveNext() or True)] print(names) conn.Close()
- 保存为
ado_cron.py
,通过 Windows 任务计划程序运行(类似 Cron)。
- 保存为
- 结合 Traefik:
- Traefik 代理 ASP 网站(ADO 提供后端数据)。
yaml services: asp: image: my-asp-app labels: - "traefik.http.routers.asp.rule=Host(`asp.example.com`)" - "traefik.http.routers.asp.entrypoints=websecure"
- 结合列表推导式:
- 使用列表推导式处理 ADO 查询结果。
python import win32com.client conn = win32com.client.Dispatch("ADODB.Connection") conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Northwind.mdb") rs = conn.Execute("SELECT CompanyName FROM Customers") names = [str(rs.Fields("CompanyName").Value) for _ in range(rs.RecordCount) if not rs.EOF and (rs.MoveNext() or True)] print(f"Names: {repr(names)}") # 调试使用 repr() conn.Close()
- 结合
==
和is
:
- 检查连接状态:
python if conn.State == 1: # 值比较 print("Connected") if conn is not None: # 身份比较 print("Connection object exists")
五、注意事项
- 连接字符串正确性:
- 确保
Provider
和Data Source
与数据库类型匹配。 - 使用
https://www.connectionstrings.com/
查找标准格式。
- 错误处理:
- ASP:
If conn.Errors.Count > 0 Then Response.Write conn.Errors(0).Description
。 - Python:
try-except
捕获 COM 错误。
- 性能:
- 避免频繁打开/关闭连接,使用连接池(ASP 中通过全局变量)。
- 使用
rs.CursorLocation = 3
(adUseClient)优化记录集。
- 调试(类似 console.log):
- ASP:
Response.Write conn.State
。 - Python:
print(repr(conn))
或print(str(conn.State))
。
- 现代替代:
- Python:推荐
pyodbc
或sqlalchemy
。 - .NET:使用 ADO.NET 或 Entity Framework。
- 环境依赖:
- Windows 环境,安装 MDAC 或 ACE.OLEDB(Access 2007+)。
- Python:确保
pywin32
正确安装。
六、总结
- ADO Connection 是 ADO 访问数据库的核心,通过
ConnectionString
连接多种数据库。 - 关键步骤:创建对象、设置连接字符串、打开连接、执行操作、关闭连接。
- 结合上下文:
- REST API:返回 JSON 数据。
- ChromeDriver:测试 ADO 驱动的页面。
- Cron:定时查询数据库。
- Traefik:代理 ASP 服务。
- 列表推导式:处理查询结果。
- 调试:使用
Response.Write
(ASP)或print(repr())
(Python)。
如果需要更详细的连接字符串配置、特定数据库示例(如 SQL Server)或错误调试,请提供更多细节!