在敲学生管理系统之前,我们就学习过ADO的有关知识。但是昨天被问到ADO的几个对象,顿时无言!为什么会出现这样的结果呢,明明是学习过了,而且也实践过(红皮书的五个例子)。这充分说明了,在以往的学习过程中,自己没有及时的进行总结,或是总结了,也只是形式上的总结而已,而没有进行进一步的思考。

首先,我们先来了解一下什么是ADO?

ADO(ActiveX Data Object),是一种基于OLEDB之上的数据库访问技术,OLEDB是一种底层的编程接口,它支持关系或非关系型数据源,比如各种类型的数据库,电子表格,电子邮件和文本文件等。

ADO对象模型主要包括七个对象,分为三个独立对象(主要对象)和四个非独立对象(辅助对象)。如下图:

从上面的图中我们可以清楚的看出,为什么ADO要分为独立对象和非独立对象,主要是由于非独立对象都需要依赖于三个独立对象。那么这几个对象之间有什么关系呢?

 1.Connection对象:负责数据库的连接工作,可以说它是操作数据库的前提,换句话说就是其他对象都必须依赖于Connection对象才能发挥其特有的功能。

Errors集合和Error对象: Errors集合包含Connection对象的所有Error对象。任何涉及到ADO对象的操作都有可能发生一个或多个提供错误。当出现提供错误时,Error对象将被放在Error集合当中。

2.Command对象:主要是负责对数据库执行命令和操作。使用Command对象还可以将查询到的结果返回到RecordSet。

Parameter集合和Parameter对象:Command对象包含一个Parameters集合,Parameters集合包含参数化的Command对象的所有参数,每个参数信息由parameter对象来表示。

 3.RecordSet对象:表示来自基本表或是命令(Command)执行结果的记录集。它可以说是ADO中最灵活,功能最强大的一个对象。利用该对象可以方便的操作数据库中的记录,完成对数据库的几乎所有操作。

Fields集合和Field对象,Fields集合代表的是RecordSet中的各个列数据库字段,RecordSet返回中的每一列在Fields集合中都有一个相关的field对象。如果说RecordSet是用来操作数据的,那么Field就是用来处理数据。

最后是Properties集合和Property对象,Properties集合是用来保存前面的Connection,Command,RecordSet以及Field对象有关的各个Property对象,每个Property对象中都存有这些对象的信息。

ADO和我们后面的ADO.NET都是一种数据库访问技术,它们之间有什么区别呢,后面我将会在我的下一篇博客中进行补充和说明。

再看ADO对象模型的更多相关文章

  1. 再看Ajax

    再回顾Ajax相关的内容,再次梳理学习还是很有必要的,尤其是实际的开发中,ajax更是必不可少,仔细学习以便避免不必要的错误. 文章导读: --1.使用XMLHttpRequest---------- ...

  2. 再看ftp上传文件

    前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...

  3. 再看 AspriseOCR - OCR应用开发 -20151124

    再看 AspriseOCR - OCR应用开发 我写这个博文时间为 2015/11/24日,注意时间因为,网上很多文章时间上很久远,有的已经不能参考了 很多人面对从图片中识别文字或者数字0~9  A~ ...

  4. Android菜鸟的成长笔记(17)—— 再看Android中的Unbounded Service

    原文:Android菜鸟的成长笔记(17)-- 再看Android中的Unbounded Service 前面已经写过关于startService(Unbounded Service)的一篇文章:&l ...

  5. 再看case语句

    再看case语句,case语句只处理单条记录,而不是set 列名的使用,可以当做数值来使用: case when 后面简直是完美的的,什么东西都是能放的,只要是一个逻辑上的true/false的逻辑就 ...

  6. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

  7. python基础----再看property、描述符(__get__,__set__,__delete__)

    一.再看property                                                                          一个静态属性property ...

  8. perf使用的问题,再看perf record,perf record 设置的采样频率,采样频率是如何体现在

    当perf stat -e branches 是统计 再看perf record,perf record是为了是记录时间发生的时候的调用栈, 在我的测试代码中总共有200,000,000条branch ...

  9. 再看Scrapy(1) 基本概念

    再看Scrapy(1) 基本概念 1 准备 安装scrapy: 国内镜像源(官方的pypi不稳定)安装 pip3 install -i https://pypi.douban.com/simple/ ...

随机推荐

  1. 数据库存储过程 — Sql Server

    Mysql.Oracle等主流关系型数据库基本都支持存储过程,这里使用Sql Server为例进行说明. 存储过程的概念: Sql Server存储过程 SQL Server 中的存储过程是由一个或多 ...

  2. Handler Looper 原理 详解

    演示代码 public class MainActivity extends ListActivity {     private TextView tv_info;     private CalT ...

  3. hadoop mapreduce 端参数优化

    在MapReduce执行过程中,特别是Shuffle阶段,尽量使用内存缓冲区存储数据,减少磁盘溢写次数:同时在作业执行过程中增加并行度,都能够显著提高系统性能,这也是配置优化的一个重要依据. 下面分别 ...

  4. SwfUpload及imgareaselect使用方法

    1.导入文件 Swfupload相关文件 imgareaselect截取插件相关文件 2.前端html代码 添加一个截取图片的按钮,其他为swf所需的html. <body> <di ...

  5. net.sf.json.JSONException: There is a cycle in the hierarchy!

    因为项目中使用了AJAX技术,jar包为:json-lib.jar,在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题: 如hibernate延迟加载错误,这都是些老问题了,一看就知 ...

  6. Extjs 兼容IE10

    在对应的地方将Ext.isIE 修改成: Ext.isIE && !(/msie 9/.test(navigator.userAgent.toLowerCase())  &&a ...

  7. 菜鸟做HTML5小游戏 - 刮刮乐

    继上篇翻翻乐之后,又来刮刮乐.还是先上效果图: 开始demo的世界: 1.css去绘制界面效果.(源码提供) 2.原理:要实现刮刮卡内容的出现,我用div做了背景层去显示刮出的内容结果[重点].中间C ...

  8. Symfony2 HttpKernel事件驱动

    HttpKernel:事件驱动       Symfony2 框架层和应用层的工作都是在 HttpKernel::handle()方法中完成,HttpKernel::handle() 的内部的实现其实 ...

  9. 1. Server.Transfer和Response.Redirect

    今天在使用ServerTransfer和Response.Redirect定位到当前页面来实现刷新页面时,发现了一些现象: 1.使用Response.Redirect刷新本页面,造成当前页面显示的数据 ...

  10. Python学习笔记整理(五)Python中的列表.

    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件.他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套. 一.列表 列表的主要属性: *任意对象的有序集合 从 ...