答案:---- 摘 要 ASP 与ADO 是一 种 完 全 的Web 数 据 库 访 问 解 决 方 案, 使 用 它 你 可 以 很容 易 地 对 数 据 库 进 行 访 问, 本 文 结 合 一 个 实 例 详 细 介绍ASP 与ADO 在 网 上 数 据 查 询 中 的 应 用。
---- 关 键 词 ASP,ADO,WEB 服 务 器, 浏 览 器, 数 据 库
---- 1. ASP 和ADO 简 介
---- ASP(Active Server pages) 简 言 之 就 是 一 个 服 务 器 端 的(Server-side) 脚 本 执 行 环 境,你 可 以 用 它 产 生 和 执 行 动 态 的、 交 互 的、 高 性 能 的Web 服 务 器 应 用 程 序。 当 脚 本 在 服 务 器 端 而 不 是 在 客 户 端执 行 时,Web 服 务 器 将 完 成 包 括 产 生 发 往 浏 览 器 的HTML(Hypertext Markup Language) 页 的 所 有 工 作。 不 必 担 心 浏 览 器 是 否 能 执行 你 的 网 页:Web 服 务 器 将 完 成 所 有 的 处 理 工 作。
---- 左 图 是ASP 的 工作 模 式。 当 浏 览 器 向Web 服 务 器 提 出(.asp) 文 件 的 请 求 时,一 个ASP 脚 本 就 开 始 执 行, 这 时Web 服 务 器 调 用ASP, 把 该 文件 全 部 读 入 并 执 行 每 一 条 命 令, 然 后 将 结 果 以HTML 页 面形 式 送 回 浏 览 器。
---- ADO(ActiveX Data Object,ActiveX 数 据 对 象), 是 一 个ASP 内 置 的ActiveX 服 务 器 组 件(ActiveX Server Component) 数 据 库 访 问 组 件(Database Access Component) 提 供 的 技 术,你 可 把 它 与ASP 结 合 起 来, 建 立 提 供 数 据 库 信 息 的 网 页内 容, 对 数 据 库 进 行 查 询、 插 入、 更 新、 删 除 等 操 作。
---- 要 执 行ADO, 服务 器 端 须 安 装Windows NT Server 和Internet Information Server(IIS), 而 客户 端 只 要 有IE 或NETSCAPE 较 新 版 本 的 浏 览 器 即 可。
---- 2. 站 点 数 据 库访 问 的 几 种 解 决 方 案
---- 实 现Web 数 据 库访 问 的 方 法 大 致 可 分 为 两 类, 一 种 是 以Web 服 务 器 作 为中 介, 把 浏 览 器 和 数 据 源 连 接 起 来, 在 服 务 器 端 执 行对 数 据 库 的 操 作; 另 一 种 是 把 应 用 程 序 和 数 据 库 下 载到 客 户 端, 在 客 户 端 执 行 对 数 据 库 的 访 问。
---- * 公 共 网 关 接口(CGI,Common Gateway Inte易做图ce)
---- 当 浏 览 器 发 出HTTP Request.form 请 求 时,Web 服 务 器 执 行 相 应 的 应 用 程 序, 访 问站 点 数 据 库, 并 将 查 询 结 果 以HTML 格 式 送 回 到 浏 览 器。这 种 方 式 有 很 多 缺 点, 功 能 有 限、 开 发 困 难, 且 不 具备 事 物 处(Transaction) 理 功 能, 这 在 很 大 程 度 上 限 制 了它 的 应 用。
---- * Internet 数 据 库连 接 器(IDC,Internet Database Connector)
---- 这 是 一 种 简 易方 案, 对 数 据 库 的 操 作 仍 然 放 在Web 端, 但 你 可 以 通 过SQL(Structured Query Language) 语 句 对 数 据 库 进 行 查 询、 输 入、 更 新、 删 除等 操 作。IDC 设 计 简 易, 可 不 用 编 译 直 接 执 行, 并 且 支持 对 数 据 的 多 重 查 询(Multiple Query)。
---- * 先 进 数 据 库连 接 器(ADC,Advanced Data Connector)
---- 前 两 种 方 案 中对 数 据 库 的 操 作 都 是 在 服 务 器 端 进 行 的, 而ADC 是 在 浏览 器 端 执 行 数 据 查 询 动 作。 当 浏 览 器 提 出 对 数 据 库 的操 作 请 求 时,ADC 先 将 相 应 的 数 据 库 下 载 到 浏 览 器 端,在 用 户 端 进 行 对 数 据 库 进 行 操 作。 显 然, 这 种 方 案 的效 率 是 很 高 的。 客 户 端 对 数 据 库 的 查 询 是 由 安 装 在 客户 端 的ADC ActiveX Control 完 成 的, 而 这 个ActiveX Control 是 由 站 点服 务 器 自 动 下 载 和 安 装 在 客 户 端 的。
---- * ADO 与ASP
---- 这 是 一 种 完 全的Web 数 据 库 访 问 解 决 方 案, 你 可 把ADO 与ASP 结 合 起 来, 建立 提 供 数 据 库 信 息 的 网 页 内 容, 在 网 页 中 执 行SQL 命令, 对 数 据 库 进 行 查 询、 插 入、 更 新、 删 除 等 操 作。ADO 中 你 可 以 用VBScript、JavaScript 语 言 来 控 制 数 据 库 的 访 问( 而ASP 恰 恰 是 脚 本 语 言 的 解 释 环 境) 和 查 询 结 果 的 输 出;ADO 中使 用RecordSets 对 象 对 数 据 库 进 行 操 作;ADO 可 以 连 接 多 种支 持ODBC 的 数 据 库。
---- 3 .ASP 与ADO 在 网上 数 据 查 询 中 的 应 用 实 例- 港 澳 证 件 信 息 查 询
---- 这 个 应 用 所 要完 成 的 是 对 港 澳 出 入 境 数 据 库 进 行 查 询 操 作, 你 可 以给 出 一 种 或 几 种 查 询 条 件, 然 后 按 你 的 要 求 显 示 查 询结 果。
---- * 确 定 数 据 源
---- 要 访 问 网 上 数据 库, 必 须 首 先 设 定 数 据 来 源。 在 服 务 器 上 打 开" 我 的 电 脑" 中 的" 控 制 面 板", 双 击"ODBC",在" 系 统DSN" 下 选" 添 加", 选 出 你 预 先 做 好 的数 据 库 种 类、 名 称 和 位 置。 我 这 里 要 用 到 的 是FoxPro 数据 库, 数 据 源 名 称 为GACX, 主 数 据 库 名 称 为visa.dbf, 编 码数 据 库 名 称 为zd.dbf。
---- * ADO 数 据 库 的使 用
---- ADO 数 据 库 的 设计 方 法 是 先 用Server.CreatObject 取 得 对 象"ADODB.Connection" 的一 个 实 例, 并 用"Open" 打 开 待 访 问 的 数 据 库:
Set Conn=Server.CreatObject("ADODB.Connection")
Conn.Open " 待 访 问 的 数 据 库 名 称"---- 然 后 执 行SQL 命令, 即 对 数 据 库 进 行 操 作, 这 里 要 使 用Execute 命 令:
---- Set RS =Conn.Execute("Select ...From...Where...")
---- 下 一 步 就 可 以对 数 据 库 进 行 查 询 操 作, 要 使 用RecordSets 对 象 的 如 下 命令:
---- * RS.Fildes.Count RecordSets 的 字 段 数
---- * RS(i).Name 第i 个字 段 名
---- * RS(i) 第i 个 字 段的 记 录
---- * RS(" 字 段 名") 指 定 字 段 的 记 录
---- * RS.EOF 是 否 指 向最 后 一 个 字 段 True or False
---- * RS.MoveFirst 指 向第 一 条 记 录
---- * RS.MovePrev 指 向前 一 条 记 录
---- * RS.MoveNext 指 向后 一 条 记 录
---- * RS.MoveLast 指 向最 后 一 条 记 录
---- * RS.GetRows 将 查 询结 果 存 放 在 数 组 中, 然 后 再 从 数 组 中 读 取
---- * RS.Properties.Count 得 到ADO 的Connection 或ResultSet 的 属 性 总 数
---- * RS.Properties(Item).Name 得 到ADO 的Connection 或ResultSet 的 属 性 名 称
---- * RS.Properties(Item) 得 到ADO 的Connection 或ResultSet 的 属 性 值
---- * 具 体 实 现
---- 查 询 主 页 面 为港 澳 证 件 信 息 查 询, 对 应 程 序 为gacx.asp, 查 询 结 果 以 两种 方 式 显 示, 一 种 是 显 示 主 要 信 息- 港 澳 证 件 信 息 查询 结 果 列 表, 对 应 程 序 为gacxlb.asp, 一 种 是 显 示 全 部 信息- 港 澳 证 件 信 息 查 询 结 果, 对 应 程 序 为gacxxq.asp, 如 果查 询 条 件 不 能 满 足 时, 还 将 显 示 一 个 提 示 页 面, 告 诉用 户 不 存 在 满 足 条 件 的 结 果, 这 由 程 序gacxts.asp 完 成。
---- 首 先 根 据 客 户提 供 的 数 据 库 和 要 求 查 询 的 各 项 建 立 查 询、 查 询 结果、 查 询 结 果 列 表 页 面, 还 要 给 出 一 个 简 单 的 提 示 界面, 告 诉 用 户 不 存 在 满 足 条 件 的 结 果, 请 重 新 查 询,这 些 工 作 可 以 用FrontPage 98 完 成, 整 个 页 面 应 该 做 到 简 洁大 方, 主 题 鲜 明。 程 序 代 码 在Microsoft Visual InterDev 下 编 写。
---- 下 面 处 理 编 码数 据 库zd.dbf 中 的 内 容。 从 下 图 中 可 以 看 到 有 很 多 带 下拉 框 的 选 项 例 如" 性 别"、" 出 生 地" 等, 这 些选 项 的 内 容 都 是 从zd.dbf 数 据 库 中 提 取 出 来 的, 这 正 是本 程 序 数 据 库 处 理 过 程 中 的 一 个 闪 光 点( 这 一 部 分 是由 陶 则 民 工 程 师 设 计 并 实 现 的), 因 为 有 的 选 项 内 容很 多, 例 如 出 境 口 岸 有101 项 之 多, 你 虽 然 也 可 以 用< select > < option >...< /option >< /select > 格 式 在HTML 页 面中 把 各 个 选 项 列 举 出 来, 但 那 将 给 程 序 的 维 护 带 来 很大 麻 烦, 一 旦 编 码 数 据 库 的 内 容 有 变 动, 程 序 也 将 不得 不 作 很 多 修 改, 而 且 带 下 拉 框 的 选 项 都 是 在zd.dbf 中编 码 了 的, 往 主 数 据 库 中 输 入 数 据 时 这 些 选 项 都 只 输入 编 码, 但 显 示 时 却 不 能 显 示 编 码, 必 须 把 编 码 对 应的 汉 字 显 示 出 来。 这 段 程 序 代 码 如 下( 以 性 别 为例):
< %
Set Conn=Server.CreatObject("ADODB.Connection")
Conn.Open "GACX"
Set RS =Conn.Execute("Select BC,
MC From zd Where BC Like "se%"")
Response.Write "< SELECT SIZE=1 NAME="SEX" >"
Do While Not RS.EOF
response.write "< option
value='"RS(0)"' >" &RS(1)
Rs.MoveNext
Loop
Response.Write "< /SELECT >"
RS.Colse
Conn.Colse
% >---- 其 中,zd.dbf 包 含两 个 字 段MC、BC,MC 表 示 待 编 码 项, 如 男、 女,BC 表 示 编码, 如 性 别 编 码 的 前 两 位 为"se", 男