《VC++中通过ADO访问远程SQL SERVER 2000的高级编程.pdf》由会员分享,可在线阅读,更多相关《VC++中通过ADO访问远程SQL SERVER 2000的高级编程.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 2 4卷第 l期 2 0 0 5年 3月 延安大学学报(自然科学版)J o u r na l of Ya n a n Un i v e r s i t y(Na t u r a l S c i e n c e Ed i t i o n)Vo 1 2 4 No 1 M a r c h 2 0 0 5 VC+中通过 ADO访问远程 S QL S E R VE R 2 0 0 0的高级编程 马乐荣,高兴慧(延安大学 数学与计算机科学学院,陕西 延安 7 1 6 0 0 0)摘要:讨论 了利用 ADO 对 s QL S E RVE R 2 0 0 0数据 库进 行检 索和修 改数据 的 4种技术:
2、服务器 端游 标、客 户端 游标、操作 查询和存储过 程 并在 VC+6 0中给 出 了一个示例 关键 词:服务器 端游标;客 户端游标;操作 查询;存储过 程 中图分类号:TP 3 1 1 文献标识码:A 文章编号:1 0 0 4 6 0 2 X(2 0 0 5)0 1 0 0 4 3 0 5 ADO(Ac t i v e X D a t a Ob j e c t)是 Mi c r o s o f t 公 司 新 的数 据访 问技术 由于它是 基于 OL E DB接 口上 实现的 C OM 对象,其性 能 和易 用性都 达到 了极佳 水平 文 献 1,2 给 出 了 AD O 对 象 的使用
3、 方法 事 实 上,很 多 都 停 留 在 ADO 的 C o n n e c t i o n、C o m ma n d、Re c o r d s e t 对象最 基本属性 和方法 的运用上、且 都带有 一定的 演示性,对其 深层 次的编 程问题 阐 述 很少,这在如 开发 S QL S E RVE R 2 0 0 0大型应 用 程 序 显 然 是 不 足 的 本 文 对 利 用 AD O 远 程 访 问 s QL S E RVE R 2 0 0 0中涉及深层次的编程 问题 给予 讨论 对数据库 中数据 的检索和 修改是 数据 库应用程 序 的灵魂,AD O 也不 例外 ADO 对 s QL
4、S E RVE R 2 0 0 0数据库 进行检索 和修改 使用下面 4种技术口 :服务器 端游 标、客 户端 游标、操作查 询和存 储过程 其 中前两 种 技术 通过 Re c o r d s e t对象 来执 行,后 两 种 技术 通 过 Co n n e c t i o n或 C o mma n d对象 的 Ex e c u t e方法就可 以执行 1 Re c o r d s e t 对象 s QL游标“是 一种 临时的数 据库对 象,既可用 来放置 系统永久表 中数据行 的副本,也可 以指向储存 在系统永久表中数据行的指针 它提供 了允许以一次 一行的方 式处理底 层表 中数 据的方
5、法 在 ADO 中,可以把 Re c o r d s e t 对象 看作一种 可 以简化 对游标 中 数 据进行访 问的 C OM 对象 AD O 使用 服务器 端游 标和客户端游标来实现应用程序的功能,这通过设置 Re c o r d s e t对 象 的 C u r s o r L o c a t i o n、C u r s o r Ty p e、L o c k T y p e和 C a c h e S i z e属性来 控制 下 面对 服务器 端的游标和客户端的游标给予详细的讨论 1 1 服务 器端 的游标 AD O 定 义 了 s QL S E RVE R 2 0 0 0所支 持 的四
6、 种服务器 端游 标类 型,分 别是 只进游 标、静 态游 标、键集驱 动游标和 动态游 标 不 同的游 标检 测结 果集 变化 的能力和 消耗 资源(如在 Te mp d b中所 占的 内 存和空 间)的情况不同 某些 游标允许查看 其他用户 对查 询结果 中记 录所作 的改 动,某些 游标 只允 许在 查询 结果 中向前 移动,而 其它游 标允 许 向前也 允许 向后 移 动 当应 用程 序把 R e c o r d s e t 对 象 或 它使 用 的 Co n n e c t i o n对 象 的 C u r s o r L o c a t i o n属 性 设 为 a d Us e
7、S e r v e r时,使 用就是服 务器 端 的游 标,服 务器 端的游标在 s QL S E RVE R 2 0 0 0服务器上实现 1 1 1 只进游 标 如果 应用 程序 把 R e c o r d s e t 对 象 的 Cu r s o r Ty p e属 性 设 为 a d Op e n F o r wa r d On l y、以及 C a c h e S i z e设 为大 于 1的数 并且 调 用 0p e n方 法 时,对 应 的 就 是 只 进 游 标 这 时 s QL S E RVE R 2 0 0 0将 用底 层表 中满 足游 标查 询 条件 的 每一 行 的 行
8、I D填 充 游标 的存 储结 构 只进 游 标是 最 简 单 的 一种游 标 正如其名称所示,只能在 游标所对应 的记 录集 中前 向移动 一旦 移过 了该记录,则该记录在 游 收稿 日期:2 0 0 4一儿 一2 0 作者简介:马乐荣(1 9 7 4一),男,陕西神木县人,延安大学讲师 维普资讯 http:/ 4 4 延安 大学 学报(自然 科学 版)第 2 4卷 标 中就无 效了 虽 然该功 能级别作用有限,但其速度 极快,以及 对 S QL S E RVER 2 0 0 0影响 最小 因此,大 多数 的 c s开发人 员倾向于使 用 只进游标 只进游标允许开发 人员从游 标中检索和更改
9、当 前 记 录,当 然这 时 L o c k Ty p e不能 为 a d L o c k Re a d On l y ADO 最 多从 游标 中检索 的 记录 数 由 C a c h e S i z e属 性 所 设 定,当 浏 览 完 缓 冲 区 中 的 记 录 后,ADO将检索 下一批记录 1 1 2 静 态游标 当应 用程序把 Re c o r d s e t对象 的 C u r s o r Ty p e 属性设为 a d Op e n S t a t i c时,对应 的就 是静 态 游 标当调 用 Op e n方 法 时,S QL S E RVE R 2 0 0 0在 T e mp
10、d b中建立一个 临时工作 表,此 工作表 是满足查询条件的底层数据库表 中数据的副本,以后 对游标的操作就是对此工作表的操作 可以向前和向 后浏览游标,而数据不会改变,且它始终是 只读的,而 不管 L o c k T y p e的值是什么 如 图 1 所示:静态游标不会显示游 标打开 以后在数据库 中新 插入 的行,即使它 们符合 S e l e c t 语 句 的查询 条件也 如此 如果 组成结果集的行 由其 它用 户更 新,新的数 据值不 会 显示 在静态 游标 静 态游标 仍会 显示在游 标打开 以后删 除的行 也 即静 态游标 总是按 照游 标 打 开 时 的 原 样 显 示 结 果
11、 集 应 用 程 序 可 以 使 用 Re c o r d s e t对 象 的 各 种 Mo v e方 法,以 实 现 在 Re c o r d s e t中 的浏 览 ADO 获 取 由 C a c h e S i z e属 性 设定 的记录 数,在 浏览 Re c o r d s e t 时,一旦超过 了当 前 缓 冲区 的数据,则 ADO 将从 游 标 中获取下 一批 的数据 1 1 3 键 集 驱 动 游 标 当把 Re c o r d s e t对 象 的 C u r s o r Ty p e属性 设 为 a d Op e n Ke y s e t时,对 应 的就 是键 集驱动游
12、标 键集驱 动游 标相 对于 前两 种游 标 而 言,它 的结构 要复杂 的 多,如 图 2所示 当应用 程 序 调 用 Op e n方 法 时,S QL S ERVER 2 0 0 0将 在 Te mp d b中 建立一 个 临时工 作表 用 于 存储 键 集,键 集是 包含 一组惟 一 识 别游 标 中每 一 行 的 一组 关键 字 键集驱 动游标 中的成员和行顺序是 固定的 它不 仅允许更新 数据,而且 还可 以允许 查看 其 他用 户所 作的改动 但是,由其 他用 户所做的插入在游 标 内是 不可 见的,以及其 他用户所 删 除的记 录在 下一 次刷 新缓 冲区时将被 从键 集游标 中
13、删 除,而 用 户插 入的 记录在游标末尾 可见 图 2 键集 驱动 游标 键集 中的数据 有两 个作 用 首 先,S QL S E RV E R 2 0 0 0使用这些数据定位满 足查询的记录 其次,如果更新 键集游 标 中任意记录 的数 据,键 集数 据可 以使 得 s QL S ER VE R 2 0 0 0在 表 中 确定 该 记 录 的 维普资讯 http:/ 第 1期 马 乐荣,高 兴慧;VC+中通过 AD O 访 问远 程 S QL S ER VER 2 0 0 0的 高级 编 程 4 5 位 置,然 后 更 新 它如 同 静 态 游 标,AD O 把 由 C a c h e S
14、 i z e属性 所 指定数 目的记 录存 储 在本地 缓冲 区,每次 AD O 从 键 集游 标 中请求 数 据来填 充缓 冲 区,s QL S E RVER 2 0 0 0都 会根 椐键 集数 据来 确定 数据库 中适 当条 目的数据 1 1 4 动 态游标 动态游标与键 集驱 动游标非常 相似 S QL S ER VE R 2 0 0 0只检 索满 足查 询规则 记 录 的关 键字段 信息 用于填 充动 态游标 的存储结 构 同样 地,S QL S E RVE R 2 0 0 0也 返 回一批记 录填 充 客户机 缓 冲 区 但 是,除 此之 外 没 有其 他类 似 之处 了 下 一次
15、客户机 请求 另一 批记 录 时,s QL S E RV E R 2 0 0 0将 重新检查 数据 库 中内容,然 后重新 建立 键 集,再向客户机应 用程序返 回 这意味着所有用户 做的全部 Up d a t e、I n s e r t、D e l e t e 语 句均通过游 标可 见 显然它消耗的 S QL S ER VE R 2 0 0 0资源最多 1 1 5 使 用服务 器端游标 的优缺点 由于服务器 端游标 在 s QL S ERVE R 2 0 0 0服务器上 实现,所 以 它具有如下 的优点:1)可以使用 R e c o r d s e t 对象来处理维护查询结 果 的服 务器端
16、 游标,不需 要编制代 码来 确定如 何更 新数据库 相反,通过 Re c o r d s e t 对 象就可以访 问和 修改数据 2)可 以利 用 应 用于 服务 器 端游 标 的 AD0 功 能,例 如搜 索和过滤等 3)可 以 在 应 用 程 序 中 保 存 较 少 的 数 据,Re c o r d s e t 的 C a c h e S i z e 属性 控制缓存 到 AD O 库的 数据量 4)可 以使 用键集驱 动游标或动态游标的功能 正 由于 服 务 器 端 游 标 在 S QL S E RVE R 2 0 0 0 服务器上实现,所以它具有如下 的缺点:1)服 务器 端 游 标
17、需要 活动 的数 据 库连 接 在 Re c o r d s e t中浏 览 时,即 便游标 中的数 据没 有改 变,也可能会造成 网络交互 2)服务器 端游 标在 多 用户 环境 下可 能会 很 不 灵 活 当增加用户时,需要以线性 比例增 加数据库连 接和 S QL S ER VE R 2 0 0 0为每个 用户保持的游标 3)由于 需 要 活 动的 数 据 库连 接,因 此 在 如 像 c 0M+这样的组件应用 程序中不能有效的使用 1 2 默认结果集 当应 用程 序把 Re c o r d s e t的 Cu r s o r Ty p e、Cu r s o r L o c a t i
18、o n、L o c k Ty p e、C a c h e S i z e属 性设 为默 认值 时,这时使 用 的是 只读、只进特殊 类 型游标,一 次 一 个记 录 地返 回数 据,其速 度极 快,主要 用于 检索 数 据 S QL S E RVE R 2 0 0 0针 对这 种类 型 的查 询 进行 了优 化 客户机 传递给服务 器 的唯 一数据 包就 是包 含需 要执行语 句的原 始数 据包,当结果被 送 回客 户 端 时,s QL S ER VE R 2 0 0 0把尽 可 能多 的结 果 集放 置到 每个数 据包 中,以减 少发 送给 客户端 的数 据 包 数 量 S QL S E R
19、VE R 2 0 0 0或 S QL OL E DB实 际 并 末涉及 游标 的处 理,因此把 这种 特殊 类型 的游 标称 为默 认结 果 集 在 ADO 中使 用 默认 结 果集 时 要注 意避免生成多个连接 1 3 客户端游标 当应 用 程序 把 Re c o r d s e t或它 使 用 的 C o n n e c t i o n对象 的 C u r s o r L o c a t i o n属性 设 为 a d Us e Cl i e n t 时,所使用的游标就是客户端 游标 客户端 游标在 实 现 AD O AP I的 DL L 内部 实 现 当 应 用 程 序 调 用 Op e
20、 n方 法 时,ADO将 查 询 通 过 S QL OLE DB传给 S QL S E RVE R 2 0 0 0,并通过默 认结 果集检 索结 果 AD O 将查询结 果存 储在其 自己的游 标引擎 中,如 图 3所 示 这时,就 可以在 Re c o r d s e t对象 中 后滚 和前 滚了 AD O将 从游标 引擎 中检索 请求的数据 1 J l lAc t i ve Conne c t i on mp Con n Ge t I n t e r f a c e Pt r()mpCom m一 Comm an dTe xt 一”i n s e r t t bS t u d e n t l
21、 n f o(s t r Na me)Va l u e s(?)m p Co mm一 P a r a me t e r s 一 Ap p e n d(mpCom m 一 Cr e a t e P a r a me t e r(”s t r Na me”,a d Va r Ch a r,a d Par a m l nput,8):从用 户界 面输入学 生 的信 息参数值,并调 用 C o mma n d对象 的 P a r a me t e r s集 合属性 的 Ge t l t e m()方法对 P a r a me t e r赋值 代 码如下:m s t r Na me是从 用户界面输入的值
22、 p Co mm一 Pa r a me t e r s 一 Ge t l t e m(”s t r Na me”)一 Va l u e ms t r Na m e;激 活 C o mma n d对象,设 定命 令 类 型 并调 用 E x e c u t e()执行静态 s QL命 令 代 码如下:一v a r i antt Re c or dAffe c t e d,vt Nul l;v t N ul 1 vt VTERROR;v t Nu l 1 s c o d e DI SPEPARAM NOTF OUND;mp Co mm一 Ex e c u t e(Re c o r d Af f e
23、 c t e d,v t Nu l l,a d Cmd Te x t l a d Ex e c u t e No Re c o r d s);重 复执行 就完成 了学 生信 息的 录入 如 果要对 学 生 信 息 进 行 修 改 和 查 询,可 利 用 客 户 端 的 Re c o r d s e t 来 完成,这时 数据存 储 在本 地缓 冲 区 中,修改完后,可 利用批 更新功能更新数 据库 可利用如 下的代码:维普资讯 http:/ 第 1 期 马乐荣,高兴慧:Vc+中通过 AD O访问远程 s QL S E RVE R 2 0 0 0的高级编程 4 7 m pRs 一 Cur s o
24、r Lo c at i on a dU s e Cl i e nt;使用客户端 R e c o r d s e t m p Rs 一 Op e n(”Se l e c t*f r o m t b s t u d e n t l n f o,m p Co n n Ge t I n t e r f a c e Pt r(),a d Op e n S t a t i c a d Lo c kB a t c h 0p t i mi s t i c a d Cmd Te x t);修改数据 Up d a t e Ba t c h(a d Af f e c t A1 1)修改完数据调用批更新方法 4 结束
25、语 本文 讨论 了利用 AD O 对 s QL S ERVER 2 0 0 0 数据库 进行检索 和修 改使 用的 四种技 术:服务器 端 游标、客户端 游标、操作 查询、存储过 程,并给 出各种 技术 使用 AD O 对象 的优缺 点 所 论 内容 对 开发 人 员有很大的启发 参考文献:1 丁彩红,杨向萍 在 VB中通过 ADO对象实例化来远程访问S QL S ER VE R J-计算机应用研究,2 0 0 3,2 0(5):1 5 51 5 6 2 江淑娟,苏蕊等 利用 ADO方法在 C S模式下实现远程数据访问I-j 山东科技大学学报(自然科学版),2 0 0 3,2 2(1):7 3
26、 75 3 Da v i d S c e p p a著,石钧,葛俊译ADO编程技术 M 清华大学出版社,2 0 0 1 1 02 0 -4-1 Ko n r a d Ki n g著,杜大鹏等译S QL编程实用大全 M 中国水利出版社,2 0 0 3,8 9 1-5 3 Mic h a e l Ot e y,P a u l C o n t e,希望图书创作室译S QL S E RVE R 7开发人员指南 M 北京希望 电子 出版社,1 9 9 9,6 7 责任编辑贺小林 Hi g h p r o g g o f a t e a c c e s s S QL S ERVER 2 0 0 0l-I
27、i g h P r o g r a mml n g o f r e mo t e ER VER 0 0 0 b y ADO i n Vi s u a l C+6 0 M A Le-r o n gGAO Xi n-h ui(Co l l e g e o f M a t h e ma t i c s a n d Co mp u t e r S c i e n c e,Ya n a n Un i v e r s i t y,Ya n a n 7 1 6 0 0 0,Ch i n a)Abs t r a c t:The f o ur t e c hni gu e s whi c h i s s e r
28、 v e r si de c ur s or,c l i en t s i de cu r s or,a c t i o n qu e r i e s and s t or e d p r o c e d u r e s we r e d i s c u s s e d b y ADO t o s e l e c t a n d u p d a t e d a t a s o f SQL S ERVER 2 0 0 0 Ke y wor ds:s e r ve r s i d e Cu r s or;c l i e nt s i de Cur s or;a c t i o n que r i es;s t or e d pr oc e dur e s 维普资讯 http:/