第 十 八 章 数 据 库 概 念
1 8. 1 数 据 访 问 结 构
Visual Int erDev 允 许 你 非 常 灵 活 地 在 设 计 Web 应 用 中 使 用 数 据 库 部 件 你可 以 使 用 任 何 得 到 ActiveX Da ta Object(ADO Active 数 据 对 象 ) 支 持 的 数 据 库( 你 拥 有 驱 动 程 序 ) 其 中 包 括 Microsoft SQL 服 务 器 Microsoft Access Oracle 和 其 它 数 据 库
你 可 以 直 接 同 数 据 库 交 互 工 作 或 使 用 视 图 已 存 过 程 和 其 它 数 据 库 实 体来 管 理 数 据 库 数 据 库 可 以 实 际 放 到 你 Web 服 务 器 的 同 一 个 计 算 机 上 也 可 以放 到 其 它 计 算 机 上 你 可 以 使 用 Web 服 务 器 完 成 所 有 数 据 库 访 问 也 可 以 从 一个 客 户 计 算 机 上 直 接 访 问 数 据 库
要 准 备 使 用 具 有 特 色 的 Visual I nterDev 进 行 数 据 访 问 首 先 要 理 解 下 述概 念
-
在 Visual Int erDev 中 的 数 据 库 集 成
-
Web 服 务 器 和 数 据 库
-
数 据 连 接
-
数 据 库 管 理
在 Vi su al I nte rD ev 中 的 数 据 库 集 成
Visual Int erDev 把 范 围 广 泛 的 一 系 列 性 质 都 集 成 起 来 帮 助 你 使 用 数 据 库部 件 创 建 Web 应 用
-
数 据 库 项 目 你 可 以 把 它 加 到 你 Visual InterDev 解 决 方 案 中 的 一 类 项目 包 括 建 立 和 管 理 你 的 数 据 库 所 需 要 的 工 具 这 些 工 具 作 为 与 Web 页面 分 开 的 部 件
-
数 据 视 窗 提 供 数 据 活 动 视 图 的 窗 口 你 的 数 据 库 或 Web 项 目 当 前 都 连接 到 这 个 窗 口 上 不 管 你 是 在 数 据 库 项 目 中 还 是 在 Web 项 目 中 都 可 以从 数 据 视 窗 启 动 管 理 你 数 据 库 的 工 具
-
Mi cros of t Visu al D ata base T ools 可 视 数 据 库 工 具 以 图 形 方 式 管理 与 查 询 数 据 库 的 一 组 工 具 这 个 Database Designer 数 据 库 设 计 软件 允 许 你 创 建 和 修 改 表 定 义 栏 定 义 以 及 微 软 SQL 服 务 器 和 Oracle 数 据 库 中 表 之 间 的 关 系 使 用 Query Designer 查 询 设 计 器 你 可 以 创建 和 运 行 SQL 语 句 View Desig ner 视 图 设 计 器 允 许 你 创 建 视 图
-
数 据 环 境 在 你 Web 项 目 存 储 信 息 的 地 方 要 求 连 接 并 访 问 数 据 库 中 的 数据 数 据 环 境 中 保 存 着 可 重 复 使 用 的 连 接 串 允 许 你 从 Web 页 面 上 访 问数 据 库 此 外 数 据 环 境 还 保 存 着 数 据 命 令 用 于 根 据 数 据 库 对 象 或 SQL 命 令 表 示 记 录 集
-
数 据 绑 定 控 件 如 文 本 框 按 钮 等 控 件 你 可 以 把 它 们 放 到 页 面 上 自动 绑 定 在 数 据 库 记 录 中 指 定 的 段 上 数 据 绑 定 控 件 已 经 包 括 建 立 数 据 连接 提 取 数 据 以 及 更 新 数 据 库 所 需 要 的 脚 本 因 而 不 需 编 写 脚 本 就 可以 把 数 据 库 访 问 机 制 建 立 到 你 的 带 有 标 题 的 Web 页 面 上
-
数 据 库 对 象 源 控 件 数 据 库 和 源 控 件 系 统 之 间 的 链 接 因 而 你 可 以 存 放SQL 脚 本 并 在 源 控 件 下 编 译 已 存 过 程 这 就 使 得 在 有 多 个 数 据 库 编 程人 员 的 公 司 中 进 行 开 发 变 得 比 较 容 易 也 比 较 安 全
We b 服 务 器 和 数 据 库
在 访 问 数 据 库 的 Web 应 用 中 出 现 两 个 相 似 服 务 器 server-lik e 功能 一 个 是 处 理 页 面 请 求 的 Web 服 务 器 一 个 是 数 据 库 服 务 器 或 处 理 数 据 库访 问 的 等 效 软 件 尽 管 这 两 种 服 务 器 功 能 是 同 一 个 应 用 的 组 成 部 分 但 每 个 功能 是 彼 此 独 立 的
你 可 以 用 不 同 方 式 配 置 Web 服 务 器 和 数 据 库 服 务 器 具 体 用 什 么 方 式 取决 于 你 希 望 人 们 如 何 使 用 这 个 数 据 库 服 务 器 你 的 Web 应 用 目 标 观 众 是 谁 以及 在 你 们 业 务 中 这 个 应 用 同 其 它 应 用 是 什 么 关 系 下 边 是 可 能 的 配 置 选 项
-
数 据 库 服 务 器 可 以 同 Web 服 务 器 在 同 一 个 计 算 机 上 运 行
-
数 据 库 服 务 器 可 以 同 Web 服 务 器 放 在 不 同 计 算 机 上 如 果 你 希 望 每 台 计算 机 根 据 自 己 的 任 务 进 行 优 化 或 者 你 希 望 在 多 个 Web 服 务 器 中 分 享 数据 库 服 务 器 或 者 数 据 库 服 务 器 用 于 Web 应 用 以 外 的 应 用 这 时 你 就应 该 这 么 做
- 数 据 库 服 务 器 和 Web 服 务 器 可 以 是 完 全 分 开 的 两 个 进 程 彼 此 不 相 互 通信 如 果 客 户 计 算 机 可 以 直 接 访 问 数 据 库 这 种 模 式 就 是 很 实 际 的 这样 可 以 提 高 性 能
- 数 据 库 可 以 在 本 地 客 户 计 算 机 上 在 特 定 情 况 下 例 如 测 试 你 就可 以 这 样 做
使 用 Web 服 务 器 作 为 数 据 库 网 关 是 最 普 通 的 策 略 因 为 它 使 Web 应 用 达 到最 广 泛 的 范 围 即 服 务 器 干 数 据 库 的 事 这 样 用 户 有 什 么 类 型 的 浏 览 器 都 没关 系 了 因 此 服 务 器 方 数 据 库 访 问 对 Internet 公 共 站 点 来 说 是 一 种 很 好 的 选择 在 这 里 用 户 可 以 使 用 任 何 浏 览 器 访 问 站 点
在 另 一 方 面 客 户 方 访 问 可 以 提 供 更 丰 富 的 客 户 经 验 尤 其 是 完 成 任 务 的
经 验 因 为 浏 览 器 可 以 独 立 于 Web 服 务 器 管 理 数 据 集 然 而 客 户 方 访 问 要 求用 Internet Explorer DHTML 作 为 浏 览 器 而 且 这 个 数 据 库 要 借 助 于 特 定 数 据库 驱 动 器 才 能 访 问 因 此 客 户 方 数 据 库 访 问 在 内 部 网 站 点 是 最 实 际 的 例 如在 公 司 Web 站 点 上 在 这 里 用 户 使 用 带 有 可 知 性 质 的 标 准 浏 览 器 访 问 站 点
关 于 Web 服 务 器 和 数 据 库 服 务 器 安 全 的 问 题 参 见 第 六 章 Web 项 目 概 念中 的 安 全 一 节
数 据 连 接
要 使 用 数 据 库 你 就 要 把 数 据 连 接 加 到 你 的 Visual I nterDev 项 目 上 告诉 项 目 如 何 访 问 数 据 库 对 于 典 型 情 况 一 条 数 据 连 接 包 括 诸 如 下 述 信 息
-
你 正 访 问 的 数 据 库 类 型 例 如 微 软 SQL 服 务 器 和 服 务 器 名 字 如 果合 适 的 话
-
数 据 库 名 字 例 如 pubs
-
用 户 名 字
-
口 令
如 果 需 要 的 话 你 可 以 把 许 多 数 据 连 接 加 到 你 的 项 目 上 例 如 如 果 你 的应 用 要 求 访 问 两 个 不 同 的 数 据 库 你 就 需 要 加 上 两 条 数 据 连 接 关 于 如 何 添 加数 据 连 接 的 细 节 参 见 第 三 章 数 据 库 基 础 中 的 连 接 数 据 库 一 节
创 建 连 接
当 你 创 建 一 条 数 据 连 接 时 Visual Int erDev 从 你 的 计 算 机 上 DSN 数 据 源名 字 中 读 出 连 接 信 息 你 的 计 算 机 可 以 在 文 件 DSN 存 储 在 一 个 .dsn 文 件 中
或 机 器 DSN 即 系 统 DSN 存 储 在 你 计 算 机 的 Windows 寄 存 器 中 中 提 供 DSN
信 息
文 件 数 据 源 名 字
在 一 个 文 件 DSN 情 况 中 Visual Int erDev 从 该 DSN 读 出 连 接 信 息 提 取 连接 串 然 后 把 连 接 节 点 加 到 你 项 目 数 据 环 境 中
从 DSN 中 提 取 的 连 接 串 存 储 到 你 Web 项 目 的 一 个 称 作 DataEnviro nment.asa 的 二 进 制 文 件 中 这 种 连 接 称 作 无 DSN 连 接 因 为 Web 项 目 不 再 需 要 DSN 建 立 连 接 此 后 Visual InterDev 便 可 以 简 单 按 照 需 要 从 上 述 二 进 制 文 件 中读 出 连 接 信 息
机 器 数 据 源 名 字
在 使 用 机 器 或 称 作 系 统 DSN 情 况 中 不 使 用 连 接 串 而 是 在 每 个 开 发 机 器上 或 Web 服 务 器 中 都 要 重 新 创 建 DSN
ODBC 驱 动 程 序
在 运 行 的 时 候 服 务 器 必 须 有 相 应 的 ODBC 驱 动 程 序 以 产 生 到 数 据 源 的 连 接按 照 默 认 配 置 在 你 安 装 Visual Int erDev 的 时 候 ODBC 驱 动 程 序 便 安 装 到 你的 开 发 计 算 机 和 你 的 服 务 器 上 然 而 如 果 你 在 其 它 服 务 器 上 使 用 你 的 应 用 时必 须 保 证 这 些 服 务 器 也 有 正 确 的 ODBC 驱 动 程 序
数 据 连 接 的 安 全
- 般
说 来 在 你 创 建 一 个 应 用 的 时 候 你 会 希 望 拥 有 各 种 可 能 特 权 以 便
你 可 以 按 照 需 要 操 纵 数 据 库 和 数 据 然 而 在 用 户 访 问 数 据 时 你 希 望 他 们 只拥 有 运 行 应 用 所 需 要 的 最 小 特 权
你 的 最 大 风 险 是 在 数 据 库 上 创 建 用 户 开 工 文 件 (profiles) 例 如 你 可 能创 建 一 个 管 理 员 级 用 户 开 工 文 件 为 你 自 己 在 开 发 时 使 用 你 还 可 以 创 建 一 种用 户 开 工 文 件 这 种 开 工 文 件 具 有 与 你 应 用 的 用 户 相 应 的 特 权 如 果 数 据 库 服务 器 不 与 Web 服 务 器 在 同 一 个 计 算 机 上 你 还 必 须 保 证 在 操 作 系 统 级 别 上 已 经定 义 了 正 确 的 用 户 开 工 文 件 要 了 解 更 多 内 容 参 见 第 六 章 Web 项 目 概 念
接 着 当 你 创 建 一 条 数 据 连 接 的 时 候 你 可 以 规 定 设 计 期 间 验 证 和 运 行 期间 验 证 设 计 期 间 验 证 是 在 开 发 应 用 的 时 候 你 使 用 的 用 户 名 和 口 令 验 证 运 行期 间 验 证 是 应 用 正 在 运 行 的 情 况 下 连 接 数 据 库 时 Visual InterDev 使 用 的 用户 名 和 口 令 进 行 的 验 证
在 规 定 设 计 期 间 验 证 的 情 况 下 你 要 选 择 你 的 验 证 达 到 的 安 全 程 度 对 于最 可 靠 的 安 全 你 可 以 选 择 在 你 每 次 连 接 数 据 库 的 时 候 都 提 示 键 入 口 令 如 果你 对 安 全 不 关 心 你 可 以 选 择 不 要 提 示 口 令 在 这 种 情 况 下 Visual InterDev 把 你 的 口 令 进 行 加 密 存 储 到 项 目 中
当 你 规 定 运 行 期 间 验 证 情 况 下 你 不 必 这 样 选 择 你 不 能 向 用 户 提 示 口 令因 为 在 Web 服 务 器 上 还 需 要 出 现 提 示 因 此 你 必 须 在 用 户 名 字 上 包 含 口 令 这个 口 令 是 加 密 的 并 且 存 储 在 项 目 中 以 便 在 应 用 运 行 的 时 候 用 户 每 次 连 接数 据 库 都 可 以 把 口 令 传 递 给 数 据 库
数 据 库 管 理
除 了 帮 助 你 创 建 链 接 数 据 库 的 Web 页 面 Visual Int erDev 允 许 你 管 理 数 据
库 而 在 设 计 的 时 候 是 直 接 连 接 到 数 据 库 上 的 根 据 你 的 数 据 库 特 性 和 你 访 问的 特 权 你 可 以 使 用 Visual Int erDev 工 具 添 加 移 动 或 修 改 下 列 内 容
|
|||||||
---|---|---|---|---|---|---|---|
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
修 改 |
添 加 |
更 新 |
复 |
制 |
和 |
删 |
除 记 录 |
注 意 : 允 许 你 对 数 据 库 进 行 结 构 编 辑 的 特 点 只 有 在 Visual Stu dio 企 业 版中 才 是 可 行 的
管 理 数 据 库 同 把 数 据 库 功 能 加 到 Web 应 用 上 是 不 同 的 任 务 因 此 要 在 Visual InterDev 中 管 理 数 据 库 你 就 要 创 建 一 个 数 据 库 项 目 为 了 帮 助 你 完 成 管 理 不同 数 据 库 的 任 务 在 Visual Int erDev 中 的 数 据 库 项 目 提 供 下 列 工 具
- 数 据 视 窗 显 示 你 可 以 在 当 前 使 用 的 所 有 数 据 库 项 目 的 窗 口 从 这 个 数据 视 窗 你 可 以 编 辑 项 目 例 如 表 格 视 图 已 存 过 程 和 触 发 器
显 示 可 用 数 据 库 对 象 的 数 据 视 窗
- D a taba se D e sig ne r 数 据 库 设 计 器 该 工 具 显 示 Microsoft SQL Se rver
或 Oracle 数 据 库 作 为 数 据 报 表 , 也 可 编 辑 以 增 加 / 修 改 报 表 和 栏 的 定 义 ,
定 义 关 系 , 创 建 索 引 , 及 增 加 限 制 条 件
数 据 库 报 表 表 示 可 视 数 据 库
- Qu ery De si gner 查 询 设 计 器 允 许 你 直 观 创 建 SQL 语 句 查 询 和 修改 数 据 库 的 设 计 软 件
用 于 创 建 SQL 语 句 的 查 询 设 计 器
-
**Vi
ew D esig ner** **视 图 设 计 器** 查 询 设 计 器 的 一 种 版 本 它 允 许 你 直观 创 建 一 个 可 以 定 义 视 图 的 SQL 语 句
-
**已
存 观 察 编 辑 器** 创 建 已 存 过 程 的 窗 口 其 中 包 括 一 条 到 达 用 于 创 建
SQL 语 句 的 查 询 设 计 器 的 链 接
-
**触
发 器 编 辑 器** 用 于 创 建 触 发 器 的 窗 口
-
**脚
本 编 辑 器** 用 于 创 建 SQL 脚 本 的 窗 口 而 SQL 脚 本 是 独 立 于 任 何 具 体数 据 库 的 SQL 语 句 你 还 可 以 把 SQL 脚 本 放 到 源 控 件 之 下
1 8 .2 数 据 环 境
数 据 环 境 是 在 你 的 Visual I nterDev Web 项 目 中 存 储 信 息 的 环 境 这 里 的信 息 是 在 服 务 器 脚 本 中 用 于 连 接 和 操 纵 数 据 库 中 数 据 的 所 需 要 的 信 息 它 提 供一 种 标 准 界 面 用 于 创 建 可 重 复 使 用 的 数 据 关 联 对 象 并 把 这 些 对 象 放 到 Web 页面 上
注 意 : 数 据 环 境 可 在 服 务 器 上 使 用 如 果 你 正 在 设 计 客 户 可 访 问 数 据 使 用Internet Explorer 4.0 的 Web 应 用 数 据 环 境 在 设 计 期 间 就 可 以使 用 但 是 在 运 行 期 间 不 能 使 用
数 据 环 境 还 提 供 给 你 在 脚 本 中 可 引 用 的 对 象 允 许 你 访 问 与 管 理 数 据 库 对象 如 表 格 视 图 已 存 过 程 和 编 程 用 的 SQL 命 令 它 还 提 供 一 种 容 易 使 用 的围 绕 ActiveX Da ta Object ADO ActiveX 数 据 对 象 的 换 行 器 (wrapper) 使得 这 些 对 象 在 Visual Int erDev 中 更 容 易 访 问 更 容 易 使 用
要 了 解 数 据 环 境 你 必 须 了 解 下 述 概 念
-
数 据 环 境 内 容
-
数 据 环 境 中 拖 放 方 案 (scenario)
-
数 据 环 境 对 象 模 型
数 据 环 境 内 容
数 据 环 境 中 主 要 部 件 是 数 据 连 接 这 个 数 据 连 接 包 括 使 用 指 定 用 户 名 连 接到 一 个 数 据 库 上 所 需 要 的 信 息 例 如 你 的 数 据 环 境 可 能 包 括 一 条 连 接 这 条连 接 使 用 用 户 名 字 Admin 设 计 期 间 和 Guest 运 行 期 间 链 接 到 Microsoft SQL 服 务 器 上 Pubs 数 据 库 中 你 的 应 用 上 如 果 你 的 应 用 需 要 访 问 多 个 数 据 库 你 可以 向 数 据 环 境 加 上 多 条 数 据 连 接
在 每 条 数 据 连 接 中 你 可 以 加 上 一 个 或 多 个 数 据 命 令 命 令 对 象 这 些 命令 定 义 工 作 中 使 用 的 一 组 数 据 命 令 对 象 可 以 引 用 一 个 数 据 库 对 象 例 如 表 格查 询 视 图 同 义 对 象 已 存 过 程 或 SQL 语 句 例 如 你 可 能 创 建 一 个 引 用 作者 表 格 的 命 令 对 象 以 便 在 Web 页 面 上 显 示 这 个 表 格 的 内 容 你 还 可 以 定 义 辅助 命 令 对 象 引 用 你 可 以 调 用 的 查 询 和 已 存 过 程 以 便 显 示 和 更 新 其 它 表 格 中的 数 据
显 示 数 据 环 境 和 数 据 命 令 的 一 个 Web 项 目
在 你 应 用 中 的 任 何 页 面 都 可 以 访 问 命 令 对 象 因 而 命 令 对 象 变 成 可 重 复 使
用 的 对 象 如 果 更 改 这 个 基 础 数 据 库 你 可 以 对 命 令 对 象 进 行 单 项 更 改 这 样引 用 命 令 对 象 的 所 有 页 面 都 可 继 续 正 常 工 作
每 个 命 令 对 象 都 是 一 个 结 点 它 包 含 与 该 命 令 对 象 有 关 的 辅 助 信 息 例 如命 令 对 象 引 用 一 个 表 格 表 格 中 包 含 一 个 列 表 栏 一 个 涉 及 到 已 存 过 程 的 命 令对 象 包 含 一 个 栏 列 表 列 表 中 的 这 些 栏 是 由 该 过 程 返 回 的 命 令 对 象 也 可 以 包含 过 程 参 见 列 表 关 于 添 加 命 令 对 象 的 更 多 内 容 参 见 第 十 九 章 查 看 数 据中 的 获 得 记 录 一 节
Visual Int erDev 在 你 第 一 次 定 义 一 条 数 据 连 接 的 时 候 为 项 目 创 建 一 个 数 据环 境 你 一 旦 把 连 接 建 起 来 Visual InterDev 就 创 建 DataEnviro nmet 文 件 夹而 且 把 它 作 为 一 个 结 点 置 于 Global.asa 文 件 之 下 你 加 上 的 这 个 数 据 连 接 在DataEnviro nmet 节 点 上 显 示 出 来
在 你 建 立 辅 助 数 据 连 接 的 时 候 这 些 辅 助 连 接 都 加 到 DataEnviro nmet 节 点
上
注 意 : 在 Visual Int erDev 项 目 中 你 只 有 一 个 DataEnviro nmet 节 点 添 加 数据 连 接 的 更 多 内 容 参 见 第 三 章 数 据 库 基 础 中 的 连 接 数 据 库一 节
数 据 环 境 中 的 拖 放 方 案
数 据 环 境 的 一 个 重 要 特 性 就 是 你 可 以 拖 放 对 象 简 化 向 你 的 应 用 添 加 数 据库 访 问 机 制 的 过 程 要 创 建 新 命 令 你 可 以 把 数 据 库 对 象 从 数 据 视 窗 拖 放 到 数据 环 境 中 此 外 你 还 可 以 通 过 把 命 令 和 数 据 库 段 从 数 据 环 境 拖 放 到 你 页 面 的办 法 在 页 面 上 创 建 数 据 绑 定 控 件
下 表 汇 集 了 如 何 在 数 据 环 境 中 使 用 拖 放 功 能拖 动 对 象 从 拖 到 作 用
数 据 库 对 象 数 据 视 窗 数 据 库 环 境
中 的 连 接
为 你 拖 动 的 数 据 库 对 象 创 建 命 令对 象 例 如 拖 到 一 个 表 格 去 创建 一 个 命 令 对 象 而 它 的 数 据 库对 象 类 型 就 是 表 格
命 令 对 象 或字 段 对 象
数 据 环 境 Web 页 面 创 建 数 据 绑 定 控 件
数 据 库 对 象 数 据 视 图 Web 页 面 不 允 许 要 从 数 据 环 境 中 拖 出 对
象
关 于 使 用 数 据 绑 定 控 件 的 细 节 参 见 第 十 九 章 查 看 数 据
数 据 环 境 对 象 模 型
数 据 环 境 支 持 自 己 的 对 象 模 型 你 可 以 在 编 写 脚 本 时 使 用 该 模 型 去 操 纵 希望 在 Web 页 面 上 显 示 的 数 据 数 据 环 境 对 象 模 型 是 以 AcitveX Data Object ADO ActiveX 数 据 对 象 对 象 模 型 为 基 础 的 但 是 使 用 起 来 要 简 单 一 些
在 ADO 中 数 据 环 境 对 象 模 型 的 主 要 对 象 是 连 接 对 象 命 令 对 象 记 录 集对 象 字 段 对 象 和 参 数 对 象 这 些 ADO 对 象 中 的 每 一 个 都 有 自 己 的 特 性 和 方 法
数 据 环 境 把 这 个 对 象 模 型 加 以 概 括 使 它 使 用 起 来 比 较 简 单 数 据 环 境 本身 就 是 一 个 对 象 是 可 以 在 脚 本 中 使 用 的 并 且 包 含 这 些 ADO 对 象 的 对 象 在 这个 数 据 环 境 对 象 中 命 令 对 象 是 作 为 脚 本 中 的 方 法 使 用 的 你 可 以 调 用 一 种 命令 方 法 去 创 建 它 并 返 回 该 命 令 所 涉 及 到 的 记 录 集 或 者 去 执 行 它 的 SQL 命 令
或 已 存 过 程
数 据 环 境 中 的 每 个 对 象 还 有 你 可 在 属 性 页 面 上 为 项 目 设 置 的 属 性 或 直 接在 脚 本 中 设 置 的 属 性 关 于 数 据 环 境 对 象 模 型 和 每 个 模 型 的 属 性 有 关 方 面 的 更多 内 容 参 见 第 二 十 一 章 直 接 访 问 数 据 库 中 的 使 用 数 据 环 境 执 行 数 据 库命 令 一 节
1 8 .3 数 据 绑 定
由 于 浏 览 器 Web 服 务 器 和 数 据 库 之 间 的 相 互 作 用 以 Web 页 面 访 问 数 据 库同 在 传 统 应 用 方 式 中 用 数 据 库 进 行 工 作 是 不 同 的 而 且 以 服 务 器 为 基 础 的 数据 库 访 问 和 以 客 户 为 基 础 的 数 据 库 访 问 也 是 不 同 的
过 一 会 儿 将 解 释 如 果 你 使 用 Visual I nterDev 工 具 为 你 的 应 用 设 计 数 据库 访 问 机 制 你 作 为 应 用 开 发 者 不 需 要 担 心 这 些 基 本 差 别 尽 管 如 此 了 解下 列 概 念 还 是 有 用 的
-
服 务 器 访 问 数 据 库
-
客 户 访 问 数 据 库
-
数 据
绑 定 控 件 和 脚 本 对 象 模 型
-
在 Visual Int erDev 应 用 中 的 数 据 库 访 问 设 计
服 务 器 访 问 数 据 库
在 以 服 务 器 为 基 础 的 数 据 库 访 问 机 制 中 数 据 库 和 用 户 之 间 的 相 互 作 用 同普 通 客 户 - 服 务 器 数 据 库 应 用 共 享 某 些 特 性 然 而 Web 服 务 器 位 于 两 者 之 间 而
且 以 自 己 的 特 性 引 出 一 个 相 互 作 用 层
下 列 特 征 描 述 了 浏 览 器 Web 服 务 器 和 数 据 库 服 务 器 是 如 何 相 互 作 用 的
-
客
户 浏 览 器 给 出 数 据 录 入 窗 体 和 报 告 到 数 据 库 没 有 直 接 通 路 客户 只 能 把 请 求 传 递 给 Web 服 务 器 Web 服 务 器 再 传 递 给 数 据 库 或 把 来自 数 据 库 的 请 求 传 递 出 去
-
满
足 的 数 据 库 请 求 把 记 录 集 发 送 给 Web 服 务 器 数 据 库 服 务 器 本 身 不维 护 记 录 集 进 而 也 不 追 踪 记 录 集 中 的 当 前 记 录
-
同
数 据 库 相 互 作 用 是 由 服 务 器 脚 本 而 不 是 由 客 户 脚 本 执 行 的 服 务 器脚 本 在 页 面 发 送 给 浏 览 器 之 前 进 行 处 理 因 此 当 用 户 同 页 面 发 生 相 互 作用 时 例 如 通 过 单 击 按 钮 对 该 页 面 的 所 有 数 据 库 访 问 都 已 经 完 成
-
浏
览 器 和 服 务 器 不 再 继 续 接 触 服 务 器 不 保 持 有 关 浏 览 器 以 前 请 求 的 信息 例 如 服 务 器 不 保 持 浏 览 器 最 后 请 求 数 据 库 中 什 么 记 录 的 有 关 信 息
因 而 在 Web 应 用 中 用 户 和 数 据 库 的 相 互 作 用 同 传 统 应 用 的 解 决 方 式 是 不一 样 的 例 如 一 个 常 见 的 情 节 是 用 户 要 看 包 含 数 据 库 信 息 的 窗 体 因 而 希 望在 记 录 之 间 反 复 翻 动 页 面
请 求 完 成 这 个 任 务 的 典 型 事 件 顺 序 如 下1 . 用 户 请 求 一 个 包 含 该 窗 体 的 页 面
-
在 服 务 器 处 理 这 个 页 面 的 过 程 中 执 行 脚 本 连 接 数 据 库 然 后 执 行 一次 查 询 或 已 存 过 程 以 便 返 回 一 个 或 多 个 记 录
-
服 务
器 把 一 个 具 体 记 录 从 记 录 集 中 移 出 来
-
服
务 器 从 当 前 记 录 中 提 取 数 据 再 把 数 据 按 照 HTML 文 本 写 到 Web 页 面 上关 于 当 前 记 录 位 置 的 有 关 信 息 如 书 签 和 主 关 键 字 都 存 到 一 个 全 局 服 务
器 变 量 中 或 者 包 装 起 来 同 页 面 一 起 送 给 浏 览 器 典 型 情 况 是 服 务 器 之 后丢 弃 这 个 记 录 集
-
服
务 器 把 页 面 发 送 给 浏 览 器 在 这 里 用 户 以 HTML 格 式 查 看 数 据 库 记 录
-
用
户 单 击 页 面 上 Next 按 钮 这 个 按 钮 的 脚 本 把 HTML 格 式 提 交 给 服 务器 因 为 该 服 务 器 没 有 到 浏 览 器 的 连 接 因 而 按 钮 脚 本 必 须 把 一 种 指 示 传递 给 服 务 器 该 用 户 向 下 个 记 录 导 航 如 果 当 前 记 录 的 位 置 早 已 经 发 送 给浏 览 器 浏 览 器 就 把 这 个 信 息 送 回 给 服 务 器
-
在
服 务 器 中 服 务 器 脚 本 分 析 用 户 提 交 的 内 容 在 这 种 情 况 中 服 务 器发 现 用 户 希 望 导 航 然 后 服 务 器 重 新 发 出 先 前 的 查 询 这 个 查 询 返 回 一个 新 记 录 集 服 务 器 使 用 先 前 保 存 的 书 签 或 主 关 键 字 进 行 导 航 到 达 记 录集 中 正 确 位 置 然 后 向 前 移 动 一 个 记 录 再 重 复 步 骤 4 和 步 骤 5
这 个 方 案 似 乎 很 复 杂 实 际 上 Web 服 务 器 一 旦 把 页 面 发 送 给 浏 览 器 就 把记 录 集 和 用 户 状 态 都 忽 略 掉 比 较 起 来 这 个 过 程 有 点 像 打 电 话 同 朋 友 说 完话 就 把 电 话 挂 了 每 次 你 拨 号 叫 通 电 话 你 的 朋 友 都 把 你 以 前 说 过 的 事 忘 了
有 可 能 每 次 查 询 的 记 录 集 都 不 重 复 然 而 在 浏 览 大 量 数 据 的 时 候 不 建 议暂 时 存 储 如 果 你 暂 时 存 储 即 便 用 户 数 目 不 大 也 很 容 易 占 满 服 务 器 资 源 但是 如 果 记 录 集 只 包 含 一 行 而 且 你 又 要 使 用 乐 观 锁 定 (optimisti c lock) 去 更新 它 把 这 个 记 录 集 在 服 务 器 中 暂 时 存 储 一 下 会 提 高 效 率
通 过 服 务 器 访 问 数 据 库 客 户 环 境 便 不 直 接 控 制 数 据 库 访 问 当 服 务 器 从记 录 集 提 取 信 息 并 把 它 写 到 页 面 上 的 时 候 对 客 户 脚 本 来 说 信 息 就 变 得 同 普通 HTML 文 本 没 有 区 别 了 客 户 脚 本 不 能 直 接 执 行 一 条 命 令 去 在 数 据 库 中 进 行 移动 客 户 脚 本 必 须 把 足 够 的 信 息 发 送 给 服 务 器 脚 本 以 便 服 务 器 脚 本 可 以 从 停
放 数 据 的 地 方 提 取 出 来
注 意 : 你 可 以 使 用 设 计 期 间 控 件 和 Visua l InterDev 脚 本 编 程 对 象 模 型 去 创建 应 用 通 过 这 些 应 用 完 成 用 户 请 求 服 务 器 的 透 明 处 理 过 程 详 细 情况 参 见 第 二 十 四 章 用 设 计 期 间 控 件 和 脚 本 对 象 编 写 脚 本
客 户 访 问 数 据 库
如 果 你 的 开 发 环 境 很 现 实 就 可 以 创 建 从 客 户 到 数 据 库 的 直 接 数 据 库 访 问机 制 然 后 你 可 以 从 客 户 脚 本 全 面 管 理 数 据 库 访 问 机 制 这 样 常 常 可 以 得 到 较快 访 问 数 据 库 的 效 果 此 外 这 种 开 发 环 境 允 许 你 利 用 浏 览 器 特 性 的 优 势 创 建丰 富 的 用 户 实 践
要 从 客 户 那 里 访 问 数 据 库 你 可 以 使 用 Internet Explorer 4.0 特 有 的 动态 HTML 特 性 你 的 所 有 用 户 都 必 须 用 Internet E xplorer 4.0 作 为 他 们 的 浏 览器 此 外 你 必 须 在 服 务 器 上 保 持 数 据 库 支 持 恰 当 的 数 据 访 问 软 件 至 少 要 使用 配 置 恰 当 的 服 务 器 作 为 到 达 数 据 库 的 网 关
当 你 使 用 客 户 机 访 问 数 据 库 时 应 用 和 数 据 库 之 间 的 基 本 相 互 作 用 比 在 服务 器 上 进 行 的 访 问 简 单 一 些 如 果 你 使 用 Visual InterDev 工 具 去 管 理 数 据 库访 问 差 别 便 消 失 了 脚 本 访 问 数 据 库 的 方 式 对 两 种 情 况 都 是 一 样 的
要 实 现 在 前 边 服 务 器 访 问 数 据 库 一 节 中 描 述 的 导 航 方 案 就 要 按 下 述 步 骤执 行 应 用
1 . 用 户 请 求 包 含 窗 体 的 页 面
-
Web 服 务 器 把 该 页 面 传 递 给 浏 览 器 如 果 需 要 服 务 器 首 先 处 理 页 面 上 的脚 本 但 数 据 库 访 问 并 不 需 要 服 务 器 脚 本
-
浏 览 器 接 收 到 这 个 页 面 时 页 面 上 的 RDS 远 程 数 据 服 务 控 件 自 动 打 开记 录 集 按 照 DHTML 4.0 数 据 绑 定 规 范 把 数 据 绑 定 到 该 控 件 上
-
用
户 单 击 页 面 上 的 Next 按 钮 这 个 按 钮 脚 本 就 导 航 到 记 录 集 的 下 一个 记 录 上
- 项 重 要 不 同 之 处 是 在 Web 服 务 器 把 页 面 发 送 到 浏 览 器 上 之 后 应 用 不再 要 求 进 一 步 请 求 服 务 器 管 理 数 据 库 访 问 从 而 大 大 减 少 浏 览 器 和 Web 服 务 器之 间 信 息 往 返 的 次 数 此 外 因 为 客 户 机 不 临 时 缓 冲 记 录 集 数 据 库 的 动 作例 如 导 航 不 再 要 求 重 新 产 生 记 录 集 最 后 进 行 批 量 更 新 发 送 以 便 提 高 效 率
在 各 种 情 况 中 所 得 到 的 结 果 都 是 使 数 据 库 访 问 加 快 你 可 以 使 用 微 软 的远 程 数 据 服 务 RDS 创 建 基 于 客 户 机 的 数 据 库 访 问 机 制 有 关 RDS 的 内 容
参 见 微 软 RDS Web 站 点 http://www .microsoft.com/data/ rds/
数 据 绑 定 控 件 和 脚 本 对 象 模 型
尽 管 你 没 有 要 求 使 用 Visual Int erDev 数 据 绑 定 控 件 访 问 Web 应 用 中 的 数据 库 但 还 是 大 大 简 化 了 应 用 环 境 数 据 绑 定 控 件 提 高 一 套 完 整 的 用 户 界 面 元素 集 此 外 还 包 括 连 接 到 记 录 集 在 记 录 集 中 进 行 导 航 以 及 更 新 记 录 集 在 逻 辑上 所 需 要 的 一 切
数 据 绑 定 控 件 包 括
-
记 录 集 在 向 数 据 库 对 象 绑 定 时 起 主 要 控 制 作 用 页 面 上 的 其 它 控 制 都依 次 绑 定 到 记 录 集 控 制 上
-
单 个 控 件 显 示 数 据 库 记 录 中 单 个 字 段 的 内 容 包 括 文 本 框 列 表 框检 查 框 选 项 按 钮 和 标 签
-
栅 格 显 示 一 组 记 录
-
Re cord se tN avba r 包 括 允 许 在 结 果 记 录 集 中 到 下 个 记 录 前 一 个 记 录第 一 个 记 录 和 最 后 一 个 记 录 导 航 的 按 钮
除 了 易 于 添 加 用 于 显 示 数 据 的 用 户 界 面 元 素 之 外 数 据 绑 定 设 计 期 间 控 件还 可 以 发 挥 Visual InterDev 脚 本 编 程 对 象 模 型 的 优 势 这 个 对 象 模 型 完 成 两项 任 务 第 一 项 任 务 为 脚 本 编 程 数 据 库 访 问 机 制 提 供 一 致 性 界 面 不 管 你 进行 工 作 的 数 据 库 类 型 也 不 管 你 是 否 编 写 服 务 器 访 问 数 据 库 或 客 户 机 访 问 数 据库 的 脚 本 第 二 项 任 务 创 建 一 个 高 级 模 型 用 于 数 据 库 访 问 和 操 纵 基 于 Web 的 数 据 库 访 问 机 制 所 涉 及 到 的 大 多 数 复 杂 性 都 对 你 隐 蔽 起 来
在 使 用 数 据 绑 定 控 件 进 行 工 作 时 你 主 要 使 用 记 录 集 控 件 这 个 控 件 使 用脚 本 编 程 对 象 模 型 把 可 以 帮 助 你 管 理 结 果 记 录 集 中 记 录 属 性 和 方 法 都 展 现 给你 例 如 在 一 个 结 果 记 录 集 内 的 各 个 记 录 之 间 进 行 导 航 你 可 以 调 用 记 录 集对 象 的 moveNext 方 法 或 movePrevio us 方 法 同 样 单 个 数 据 绑 定 控 件 还 把 如下 属 性 和 方 法 展 现 给 你 这 些 属 性 和 方 法 绑 定 在 记 录 集 上 确 定 控 件 的 表 现 行为
关 于 使 用 控 件 和 脚 本 编 程 对 象 模 型 的 更 多 内 容 参 见 第 十 九 章 查 看 数 据和 第 二 十 三 章 脚 本 编 程 概 念 中 的 脚 本 编 程 对 象 模 型 一 节
在 Vi su al I nte rD ev 应 用 中 设 计 数 据 库 访 问
不 管 你 访 问 什 么 数 据 库 Visual I nteDev 中 包 含 的 工 具 都 可 以 大 大 简 化 这个 访 问 过 程 这 一 节 为 你 介 绍 如 何 使 用 数 据 库 部 件 创 建 Web 应 用 强 调 指 出 你在 哪 个 方 面 可 以 沿 着 Visual Int eDev 特 性 的 方 向 发 挥 优 势
尽 管 基 本 过 程 在 基 于 服 务 器 的 和 基 于 客 户 机 的 数 据 库 访 问 中 是 不 同 的
Visual Int eDev 数 据 库 工 具 还 是 产 生 不 同 程 度 的 透 明 性 因 为 仅 仅 有 很 少 的 不同 之 处 因 而 你 可 以 使 用 同 一 个 过 程 创 建 两 类 访 问 机 制
在 大 纲 窗 体 中 创 建 一 个 带 有 具 有 数 据 库 访 问 机 制 的 页 面 所 要 求 的 步 骤 如
下
1 . 建 立 到 数 据 库 的 连 接 通 过 在 Projec t 项 目 选 择 Add Data Connec tion
添 加 数 据 连 接 的 办 法 规 定 到 数 据 库 的 连 接
在 你 这 样 做 的 时 候 Visual Int erDev 创 建 一 个 数 据 环 境 这 个 数 据 环 境 对
你 项 目 中 所 有 数 据 连 接 起 存 储 器 作 用 因 为 不 同 Web 页 面 可 以 共 享 一 条 连 接在 你 Web 项 目 的 Global.asa 文 件 中 的 脚 本 便 维 护 这 个 数 据 环 境
如 果 你 的 应 用 要 求 访 问 多 个 数 据 库 包 括 不 同 服 务 器 上 的 数 据 库 你 可 以在 这 个 数 据 环 境 中 建 立 多 个 连 接
- 定 义 使 用 的 数 据 对 于 数 据 环 境 中 每 条 连 接 你 创 建 一 个 或 多 个 命 令
这 些 命 令 是 用 于 封 装 引 用 SQL 语 句 已 存 过 程 表 格 视 图 或 同 义 词 的 对象 每 个 命 令 都 生 成 一 个 不 同 的 结 果 集 (result set) 结 果 集 也 叫 做 游标 cursor 例 如 你 的 应 用 从 一 个 表 格 一 个 查 询 和 一 个 已 存 过 程中 读 取 数 据 你 就 可 以 定 义 三 个 不 同 命 令
- **向
Web 页 面 添 加 记 录 集 控 件** 在 你 希 望 使 用 数 据 库 数 据 的 页 面 添 加 一 个 记
录 集 控 件 在 页 面 运 行 的 时 候 这 个 控 件 起 本 地 控 制 器 的 作 用 为 其 它 相互 作 用 的 数 据 绑 定 控 件 提 供 一 个 对 象 数 据 库 对 象 要 么 直 接 绑 定 要 么 使
用 数 据 环 境 中 命 令 对 象 完 成 绑 定
- **向
Web 页 面 添 加 数 据 绑 定 控 件** 在 你 已 经 放 上 记 录 集 控 件 的 Web 页 面 上 你 可 以 再 添 加 数 据 绑 定 控 件 如 文 本 框 复 选 框 按 钮 以 及 导 航 条 使 用
这 些 数 据 绑 定 控 件 可 定 义 数 据 录 入 窗 体 报 告 以 及 其 它 在 数 据 库 中 用 于数 据 的 用 户 界 面 元 素 每 个 数 据 绑 定 控 件 都 通 过 记 录 集 控 件 链 接 到 一 个 数据 库 上
- **添
加 你 自 己 的 脚 本** 如 果 数 据 绑 定 控 件 不 提 供 在 应 用 中 希 望 使 用 的 数 据 库所 有 交 互 功 能 那 么 你 可 以 编 写 一 个 辅 助 脚 本 例 如 你 可 以 编 写 脚 本使 用 户 进 入 数 据 绑 定 控 件 合 法 化 你 还 可 以 编 写 脚 本 通 过 调 用 记 录 集 对象 中 的 方 法 完 成 诸 如 更 新 添 加 或 删 除 记 录 的 功 能 最 后 你 还 可 以编 写 脚 本 引 用 存 储 在 数 据 环 境 中 的 命 令 直 接 执 行 数 据 库 命 令
上 边 按 步 骤 列 出 的 方 案 是 比 较 简 单 的 但 是 更 复 杂 的 方 案 不 需 要 付 出 更 大的 努 力 例 如 一 个 分 类 Web 页 面 可 能 包 括 一 个 下 拉 式 组 合 框 客 户 可 以 从 其中 选 择 一 种 产 品 下 拉 式 列 表 可 以 用 第 二 种 记 录 集 创 建 出 来 除 了 记 录 集 被 分类 页 面 自 己 更 新 之 外 在 Visual Int erDev 中 的 数 据 访 问 工 具 允 许 你 很 容 易 地维 护 这 两 种 记 录 集 而 且 使 得 把 特 定 控 件 绑 定 在 每 个 集 合 上 变 得 很 容 易
如 果 你 希 望 的 话 还 可 以 旁 路 这 些 数 据 绑 定 控 件 在 脚 本 中 创 建 数 据 库 访问 机 制 在 这 种 情 况 中 你 还 要 使 用 数 据 环 境 建 立 链 接 和 命 令 数 据 环 境 提 供一 种 对 象 模 型 你 可 以 用 脚 本 同 这 种 模 型 相 互 作 用 去 查 询 数 据 库 或 修 改 数 据库 详 细 情 况 参 见 第 二 十 一 章 直 接 访 问 数 据 库 中 的 使 用 数 据 环 境 执 行数 据 库 命 令 一 节