ADO 教程
ADO 教程
ADO(ActiveX Data Objects)是 Microsoft 提供的一个用于访问数据的 COM(Component Object Model)组件库,主要用于在经典 ASP、VB、VBA 等环境中连接和操作数据库(如 Access、SQL Server)。它支持 OLE DB 和 ODBC 提供程序,允许开发者通过简单的对象模型执行 SQL 查询、记录集操作等。ADO 是 ADO.NET 的前身,在现代 .NET 开发中已较少使用,但仍适用于遗留系统或简单脚本。
本教程基于经典 ASP 和 VBScript 的示例(参考 W3Schools 和 W3School 教程),从基础到进阶逐步讲解。假设你使用 IIS 或类似环境运行 ASP 页面。如果你是 Python 开发者,可以通过 pywin32
库调用 ADO(pip install pywin32
),但本教程聚焦经典用法。
一、ADO 基础概念
- 核心对象:
- Connection:数据库连接对象。
- Recordset:记录集对象,用于存储查询结果。
- Command:命令对象,用于执行 SQL。
- Error:错误处理对象。
- 优点:跨数据库支持、简单 API、支持事务。
- 缺点:不适合高并发现代应用(推荐使用 ADO.NET 或 ORM 如 Entity Framework)。
前提:确保系统安装 MDAC(Microsoft Data Access Components),并有数据库文件(如 Northwind.mdb
Access 数据库)。
二、ADO 安装与环境准备
- 下载 MDAC(如果未安装):
- Microsoft 官方:搜索 “MDAC download” 并安装最新版本(Windows 内置于较新系统)。
- 测试环境:
- 创建 ASP 文件(如
test.asp
),在 IIS 中运行。 - 示例数据库:下载 Northwind Access 数据库(Microsoft 示例)。
三、基本用法
1. ADO 连接(ADO Connection)
使用 ADODB.Connection
对象建立数据库连接。
ASP 示例:
<%
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb"
' 测试连接
Response.Write "连接成功!"
conn.Close
Set conn = Nothing
%>
- 解释:
Provider
:指定数据提供程序(如 Jet.OLEDB.4.0 用于 Access)。Data Source
:数据库路径。- 错误处理:添加
On Error Resume Next
并检查Err.Number
。
2. ADO 记录集(ADO Recordset)
使用 ADODB.Recordset
对象执行查询并遍历数据。
ASP 示例(显示用户列表):
<%
Dim conn, rs
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM Customers", conn
Do Until rs.EOF
Response.Write rs("CompanyName") & "<br>"
rs.MoveNext
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
%>
- 解释:
rs.Open sql, conn
:打开记录集,sql
是 SQL 查询。rs.EOF
:检查是否到末尾。rs.MoveNext
:移动到下一条记录。
3. ADO 查询、排序、过滤
- 查询(ADO Query):使用 SQL WHERE 子句。
rs.Open "SELECT * FROM Customers WHERE Country='USA'", conn
- 排序(ADO Sort):
rs.Sort = "CompanyName ASC" ' 按公司名升序排序
- 过滤(ADO Filter):
rs.Filter = "Country='USA'" ' 过滤美国客户
4. 添加、更新、删除记录
- 添加(ADO Add):
rs.Open "Customers", conn, 1, 3 ' 1=adOpenKeyset, 3=adLockOptimistic
rs.AddNew
rs("CompanyName") = "New Company"
rs("ContactName") = "John Doe"
rs.Update
- 更新(ADO Update):
rs.Find "CustomerID='ALFKI'"
rs("CompanyName") = "Updated Company"
rs.Update
- 删除(ADO Delete):
rs.Find "CustomerID='ALFKI'"
rs.Delete
rs.Update
5. 使用 Command 对象执行参数化查询
避免 SQL 注入,使用 ADODB.Command
。
<%
Dim cmd, param
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM Customers WHERE Country=?"
Set param = cmd.CreateParameter("@Country", 200, 1, 50, "USA")
cmd.Parameters.Append param
Set rs = cmd.Execute
Do Until rs.EOF
Response.Write rs("CompanyName") & "<br>"
rs.MoveNext
Loop
%>
- 解释:
?
是占位符,CreateParameter
定义参数类型(200=adVarChar)。
四、Python 中使用 ADO(结合 pywin32)
如果你在 Python 环境中(如结合 REST API 或 Cron),可以使用 win32com.client
调用 ADO。
安装:pip install pywin32
(使用国内镜像:-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
)。
示例(查询数据库):
import win32com.client
conn = win32com.client.Dispatch("ADODB.Connection")
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Northwind.mdb")
rs = win32com.client.Dispatch("ADODB.Recordset")
rs.Open("SELECT * FROM Customers", conn)
while not rs.EOF:
print(rs.Fields("CompanyName").Value)
rs.MoveNext()
rs.Close()
conn.Close()
- 结合 REST API:在 Flask/Django 中使用 ADO 查询数据,返回 JSON。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/users')
def get_users():
# ADO 查询代码...
users = [] # 从 rs 构建列表
return jsonify(users)
- 结合 Cron:将 Python 脚本保存为
ado_query.py
,定时运行:
crontab -e
0 3 * * * /usr/bin/python3 /path/to/ado_query.py >> /var/log/ado.log 2>&1
- 结合 ChromeDriver:自动化测试 ADO 生成的网页数据(Selenium 抓取 ASP 页面)。
五、调试与注意事项
- 错误处理:
- ASP:
If Err.Number <> 0 Then Response.Write Err.Description
。 - Python:使用
try-except
捕获 COM 错误。 - 类似
console.log
:在 ASP 用Response.Write
,在 Python 用print(repr(rs))
。
- 性能优化(ADO Accelerate):
- 使用
rs.CursorLocation = 3
(adUseClient)启用客户端游标。 - 避免大记录集,使用分页。
- 常见问题:
- 连接失败:检查 Provider 和路径(Access 需 Jet.OLEDB.4.0)。
- 权限:确保数据库文件可读。
- 现代替代:Python 用
pyodbc
或sqlalchemy
连接数据库。
- 数据类型:
- ADO 支持 adVarChar、adInteger 等,参考 W3Schools ADO 数据类型部分。
六、进阶主题
- 事务处理:
conn.BeginTrans
、conn.CommitTrans
、conn.RollbackTrans
。 - 流对象(ADO Stream):处理二进制数据,如图片。
- 与 ASP.NET 集成:迁移到 ADO.NET(System.Data)。
七、总结
ADO 是经典数据库访问技术,适合简单 Web 应用。通过 Connection 和 Recordset 对象,你可以轻松 CRUD 操作。推荐从 W3Schools 教程实践示例。对于 Python 开发者,结合 pywin32 实现无缝集成。
如果需要特定部分(如 Python 完整示例、错误调试)或结合其他工具(如 Traefik 代理 ASP 服务),请提供更多细节!