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 安装与环境准备

  1. 下载 MDAC(如果未安装):
  • Microsoft 官方:搜索 “MDAC download” 并安装最新版本(Windows 内置于较新系统)。
  1. 测试环境
  • 创建 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 页面)。

五、调试与注意事项

  1. 错误处理
  • ASP:If Err.Number <> 0 Then Response.Write Err.Description
  • Python:使用 try-except 捕获 COM 错误。
  • 类似 console.log:在 ASP 用 Response.Write,在 Python 用 print(repr(rs))
  1. 性能优化(ADO Accelerate)
  • 使用 rs.CursorLocation = 3(adUseClient)启用客户端游标。
  • 避免大记录集,使用分页。
  1. 常见问题
  • 连接失败:检查 Provider 和路径(Access 需 Jet.OLEDB.4.0)。
  • 权限:确保数据库文件可读。
  • 现代替代:Python 用 pyodbcsqlalchemy 连接数据库。
  1. 数据类型
  • ADO 支持 adVarChar、adInteger 等,参考 W3Schools ADO 数据类型部分。

六、进阶主题

  • 事务处理conn.BeginTransconn.CommitTransconn.RollbackTrans
  • 流对象(ADO Stream):处理二进制数据,如图片。
  • 与 ASP.NET 集成:迁移到 ADO.NET(System.Data)。

七、总结

ADO 是经典数据库访问技术,适合简单 Web 应用。通过 Connection 和 Recordset 对象,你可以轻松 CRUD 操作。推荐从 W3Schools 教程实践示例。对于 Python 开发者,结合 pywin32 实现无缝集成。

如果需要特定部分(如 Python 完整示例、错误调试)或结合其他工具(如 Traefik 代理 ASP 服务),请提供更多细节!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注