ADO Overview

 

另参见基于VB语法的教程《ADO Tutorial

 

打开一个连接->创建一个命令->执行命令->操作数据->更新数据->一次完整的更新数据操作

ADO起步

这部分内容包括了ADO(ActiveX Data ObjectsActiveX数据对象)RDS(Remote Data Service远程数据服务)的概览利用ADORDS编程模型以查询和更新一个数据源的教程以及使用ADORDS的场景。

ADO概览

在与ADO相关的文档还包括以下内容,以帮助你学会使用ADO:

l          ADO的作用      描述关于ADO作用的重要信息,以及如何在自己的应用中使用它们。

l          ADO API参考    详细描述ADO中的对象、集合、属性、方法、事件、常量、错误信息

l          利用ADO编程    描述在几种不同的开发语言环境下进行ADO编程的提示与诀窍,包括了Visual C++的ADO扩展,Visual C++ 中的ADO COM接口,Visual J++ (ADO/WFC)这几种环境下的语法索引。

l          ADO示例        提供了Visual Basic, C++, Java,VBScript下的使用ADO属性与方法实例代码,以及在开发ADO/RDS应用程序方面的实践经验。

l          ADO的供应者    讲述如何基于一个可变的OLE DB数据供应者和服务供应者使用ADO。

l          ADO术语        定义了数据访问编程方面的术语

l          技术文章       包括一些技术文献的信息

ADO概览

包括以下可以顺次阅读的主题,以及如何利用ADO查询和更新一个数据源的演示教程:

l          本地数据访问的解决方案

l          基本的ADO编程模型

l          ADO编程模型的细节

l          ADO编程模型中的对象

l          ADO对象模型的概要

///

本地数据访问的解决方案

问题的提出:

你需要一种简单统一的API以使你的应用能访问、更改各类不同的数据源。一个数据源可能象一个文本文件一样简单,也可能象一个由各种数据库组成的集群那样复杂,甚至可能是将来才被发明的。而且这个API也不能预先设定访问和操作数据源的方法。尽管有这样的一些特殊要求,但一个典型的数据源总是一个关系数据库,它符合开放型数据库连接标准,并且使用SQL(Structured Query Language,结构化查询语言) 语句进行操作。对此,由微软提供的一个通用解决方案是OLE DB,它是一组COM(Component Object Model,组件对象模型)接口的集合,提供了统一的方法以访问存储在不同信息源中的数据。但是,由于OLE DB API是为了给尽可能多的不同应用提供最佳功能而设计的,因此不符合使用简便这一要求。所以,你需要一个介于OLE DB和应用间的桥梁,而ADO正是这座桥梁。

 

解决办法:

ADO定义了一个编程模型一组访问更新数据源所必需的顺序方法,这个模型囊括了ADO的所有功能。这个模型提出了一个对象模型通过一组对象对应并实现了这个编程模型。这些对象拥有方法以执行数据操作,拥有属性以表示数据或者控制对象行为的的某些必要信息。在对象间进行联系的是事件,它是某些操作发生了或将要发生时有对象发出的通知。

//

基本的ADO编程模型

ADO为你提供了一系列的方法以执行下列的顺序操作来访问数据源:

l          连接到一个数据源。你可以选择完成或取消对数据源做出的所有改变。

l          执行指定命令以访问数据源,并可以使用可变参数,或做出性能方面的优化。

l          执行命令。

l          执行命令后从一张表中的若干记录行得到的数据将会返回至缓冲区中存放,使你可以轻松地对数据进行检查、更改之类的操作,并在需要的时候利用缓冲区中的数据更新数据源。

l          提供一个通用的方法检测进行连接或执行命令时的错误。

约定俗成的,你将会使用这个模型的所有上述步骤。但这点代价与ADO的灵活性相比而言是值得的,你可以集中精力实现应用的主要工作。比如,你可以将文件中的数据直接存储到行缓冲区中,而单独利用ADO提供的资源检查数据。

//

ADO编程模型的细节

这些是ADO编程模型中的关键元素:连接Connection,命令Command,参数Parameter,记录集Recordset,字段Field,错误Error,属性Property,记录Record,流Stream,集合Collection,事件Event。

 

连接Connection

你总是通过一个连接来访问一个数据源。连接是用于交换数据必须的环境。你的应用可以直接访问一个数据源(通常称为两层架构的系统),或者通过一个类似IIS(Microsoft Internet Information Services)这样的中间层进行间接的访问(通常称作三层架构的系统)。这个模型通过Connection对象实现了连接的各种概念。

一个事务Transaction界定了通过一个连接所进行的,访问数据的一组操作的起始边界。利用ADO对数据进行的操作总是以一个事务作为原子单位,要么全部执行要么全部取消。如果你取消了一个事务或是其中的一个操作失败,那么最终的结果将会和事务发生前一样没有改变。这个对象模型没有明确提出事务这一概念,但与之对应的是一个连接对象的若干方法。

ADO通过一个OLE DB供应者访问数据与服务。一个连接被用来表示一个明确的供应者及其若干所需的参数。比如,RDS可以被微软OLE DB远程供应者(Microsoft OLE DB Remoting Provider)显式或隐式地进行调用(详细信息参见RDS教程第2步:通过OLE DB远程供应者调用RDS)。连接的目标数据源,则被一个连接串(Connection String)或URL(Uniform Resource Locator)地址唯一表示。下图为ADO连接的OLE DB与ODBC两种方式:

 

命令Command

一条命令通过预定的连接对数据源进行各种操纵。典型的命令比如添加、删除、更新、读取数据。这个模型通过Command对象实现了命令的各种概念。Command对象的存在为ADO提供了优化命令执行性能的时机。

 

参数Parameter

经常的,命令需要一些可变的参数,以在执行命令前按需进行改变。比如,你可以重复执行一条命令而给以不同的参数以获取不同的返回信息。参数特别适合于执行若干功能类似的命令。你只知道要做什么,而无需知道它具体是如何工作的。比如银行中的转账操作,你就可以将金额作为参数传递给同一命令。这个模型通过Parameter对象实现了参数的各种概念。

 

记录集Recordset

通过执行一条命令所返回的数据表中若干行的数据将被存储在本地。这个对象模型利用Recordset对象实现了这样的本地存储。记录集是检查、改变行中数据的主要手段。记录集对象允许你:

l          决定哪些记录行被查看;

l          改变行的排列;

l          定义行的排列顺序;

l          增加、改变、删除行;

l          更新数据源中已被更改的行;

l          控制记录集的所有状态。

 

字段Field

记录集中一行包括一个或更多的字段。你把记录集想象成一张二维的表格,字段就对应了表中的各列。每个字段(列)有自己的名称、数据类型、值,包含了数据源中的实际的数据。这个模型通过Field对象实现了字段的各种概念。要改变数据源中的数据,你改变记录集中当前行的Field对象的值即可,并最终通过记录集对象将改变回传给数据源。而连接对象的事务管理方法可以确保操作的成功与否。

 

错误Error

在你的应用中,错误可能在任何时候发生,比如建立连接建立,执行命令,或者设置对象的状态(比如企图使用一个未经初始化的记录集对象)时。这个模型通过Error对象实现了错误的各种概念。一个错误将会产生一个或多个Error对象,后一个错误的发生将会丢弃先前产生的那些Error对象。

 

属性Property

每个ADO对象都有一组不同的属性,以描述或控制对象的行为。属性有内置的和动态的两种类型。内置的属性是ADO对象的一部分并总是可用。动态的属性则是由下层的数据或服务供应者加入的,并且只在供应者可用时存在。这个模型通过Property对象实现了属性的各种概念。

 

记录Record

并非所有的数据源都以数据库中数据表的形式存在。信息存储系统,比如文件系统、e-mail系统,由容器和内容组件组成。容器又管理着内容以及更下级的内容。在一个文件系统里,容器和内容直接对应着磁盘目录和文件,而在e-mail系统里,容器和内容又对应了不同的文件夹和其中的邮件。这个模型通过Record对象实现了容器与内容的概念。甚至记录集的某一行就可被表示为一个Record对象。Record对象提供了拷贝、删除、移动它所对应项目的方法,以及创建一个适当的Record对象对应一个磁盘目录或文件,或Recordset的某一行的方法。一个Record对象总是和其他ADO对象,比如Connection、Recordset对象结合使用。然而,Record对象主要被设计来解决一些与在基本的ADO编程模型中描述的不同的问题。详细信息参见《记录与流(Records and Streams)》。

 

流Stream

一个信息存储系统中的内容,比如文件系统中的文件,由一个字节流组成。同样的,内存缓冲区也同样由一个字节流组成。这个模型通过Stream对象实现了一个字节流。Stream对象提供了读写连续字节或一行文本的方法,从一个文件实例化自己或将自己永久化到一个文件中。Stream对象只能与Record对象搭配使用。同样的,Stream对象被设计来解决一些与在基本的ADO编程模型中描述的不同的问题。详细信息参见《记录与流(Records and Streams)》。

 

集合Collection

ADO提供了集合collections这种对象,可以很容易地将某种特定类型的对象包容在一起。在集合中的对象可以通过集合的名称(字符串)或序号(整数)属性获取。每种对象只能被包容在对应的集合中。比如Error对象被包容在Errors collection中。ADO提供了四种类型的集合:

l          Connection对象有错误集合(Errors collection), 包含了对应于数据源中一个失败的调用时创建的所有Error对象。

l          Command对象有参数集合(Parameters collection), 包含了该Command对象要用到的所有Parameter对象。

l          Recordset与Record对象有字段集合(Fields collection),包含了Recordset对象中定义各列的所有Field对象。

l          额外的,Connection, Command, Recordset和Field对象都有属性集合(Properties collection), 包含了各自所有的Property对象。

ADO对象拥有的属性的数据类型可以是一些简单的类型,比如INTEGER(整数), CHARACTER(字符),或者BOOLEAN(逻辑)。 然而,如果返回的某个属性的数据类型是象"Collection Object"这样的就更好了。而集合对象就可以通过内置的方法读写集合中的其他对象,使读写属性就像操作一般的数据类型一样方便。例如,一个Recordset对象有一个可以返回集合对象的属性,而这个集合对象又提供了读写该Recordset的所有属性的方法。

 

事件Events

事件是在某种操作要发生或发生后发出的通知。利用事件,你可以高效的编排一个由多个异步任务组成的应用的运行。ADO模型没有具体化事件这一概念,但是通过调用事件处理器程序实现了它。事件处理器在操作执行前被调用,使你有机会检查或更改操作的参数从而取消或允许操作被完成。事件处理器在一个异步操作完成后通知你操作已完成。一些操作已经被加强以支持选择性的异步执行。比如,一个应用程序在收到某一操作执行完毕的事件后执行一个异步的Recordset.Open操作。关于事件的更多信息,参见《ADO事件模型(ADO Event Model)》,《同步与异步操作(Synchronous and Asynchronous Operations)》。

///

ADO编程模型中的对象

ADO的目的是访问、编辑、更新数据源。这个ADO编程模型规范了一个顺序执行的操作和类、对象来实现该目的(括号中的就是要用到的类)。

l          创建一个到数据源的连接(Connection),并决定是否启用事务支持。

l          创建一个命令对象(Command)对应一个命令。比如一个SQL命令。

l          利用参数对象(Parameter)定义SQL命令所需的列、表、值之类的变参。

l          执行命令(Command,Connection或者Recordset)。

l          如果命令返回的是行数据,则将数据存储在缓冲区中(Recordset)。

l          创建一个视图来排序、过滤、浏览数据(Recordset)。

l          通过添加、删除、改变行列操作来编辑数据(Recordset)。

l          适当的时候,利用缓冲区中的数据更新数据源(Recordset)。

l          如果使用了事务,接受或撤销完成事务期间所作的改变,并结束该事物(Connection)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值