VB 版 (精华区)
发信人: zxfsnow (希望的春天), 信区: VB
标 题: 深入ADO3
发信站: 哈工大紫丁香 (2000年06月05日12:34:27 星期一), 转信
发信人: ming (drwxr-x---), 信区: VB
标 题: 深入ADO(3)
发信站: 虎踞龙盘东南站 (Tue Nov 2 10:35:25 1999), 转信
ADO 2.0有什么新特点?
对于ADO1.5以前包括1.5的版本来说,从功能的角度来看RDO和ADO不是完全相等的。
等同就意味着你可以通过这两种方法解决同样的问题;它不是指存在重命名的或者优化
的功能相同的对象。因此,移植到ADO不是一个简单的事情。从另一方面来说,一旦你
熟练掌握了RDO或DAO技术的话,学习ADO是件相当容易的事情。
ADO 2.0的新特性包括事件处理,记录集的延续,分层目录结构指针和数据成形,分
布式事务处理,多维数据,远程数据服务(RDS),以及对C++和Java的支持的增强。在
钻研一些Visual Basic代码的时候将会见到所有的这些特性。当使用Visual J++时,我
将举例说明新的Windows Foundation Classes(WFC)是如何支持ADO的。ADO的最让人
激动的是在Visual Studio 6.0中的任何开发工具中你都可以找到对它的充分的支持。
ADO快速教程
ADO对象模型是由相对数量较少的对象组成。不象RDO对象模型,每个主要的ADO对象
都能被个别的被创建。这就意味着,举例说吧,你不需要在创建有效的记录集对象前创
建一个连接。
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "Biblio"
rs.Open "select * from titles where title like '%h'", cn
ADO 2。0对象是Connection,Command,Parameter,Recordset,Field,Error和Pr
operty。ADO对象模型也包括四个类集:它们分别是一套相关的Error,Parameter,Pro
perty和Field对象。让我们来看看每个对象的主要特性。
Connection对象提供连接,该连接连接的程序中存有它正在访问的数据源。属性允许
你定义:连接串,命令执行以及连接启动的间隔时间,数据提供者,(无论临时表位置
是应该在客户端还是在服务器端),和对于数据的访问权限。方法有关于如下功能的:
执行命令,打开和关闭一个连接和管理事务。
在许多地方你可以指定你想使用的提供者:通过Provider属性,在连接字符串中,或
者甚至通过Open方法。选择你最喜欢的实现方式,但要保证你没有为同样的连接指定多
个的提供者。缺省的提供者(当你没有指定你自己的提供者的情况下)是MSDASQL,针
对ODBC的Microsoft OLE DB提供者。
Command对象定义了一个SQL声明,一个存储过程,或任何其他的你可能想让提供者执
行的关于数据的操作。Command的属性有:当前连接,最大允许执行时间和参数集。一个
参数就是你将它作为参数传递给命令的值。在这些属性中用以区分一个参数的属性有:
方向(输入,输出,或者两者都有),类型当然还有它们的值。
记录集对象也许是最典型的ADO对象,然而它是最复杂的当中的一个。它表示命令执
行的结果,并且它大多是以数据库的记录集的形式给出。一个记录集是由以行和域的形
式表示的信息组成。它不一定非要映射成关系型数据库的记录。实际上,如同我早些时
候解释的那样,ADO是基于OLE DB并且能被用来可视化地访问任何数据源中的数据,这
数据源包括非关系型的数据库。记录集提供了缓冲能力,它接受数据的变化,并且将这
些变化以批处理的方式传给服务器。你可以浏览并对记录集的内容分类,如同列举和提
取行。你也能通过如:删除,添加和刷新操作等任何方式修改数据。记录集存在跟连接
的严格的关系,但是这不意味着你总是需要一个打开的连接来获得一个记录集。你也可
以按如下方式进行:
Dim RS As New ADODB.Recordset
sql =“select * from authors”
RS.Open sql, “Pubs”
既然Connection实际上是数据和命令传送的通道,所以该对象仍然被创建了,除了一
个名字叫做Recordset.ActiveConnection的属性外,它是不可见的并工作在后台。
Field对象是一列同类的数据。它提供了一种这样的编程接口,即能让你可以对单个单
元的值以及基本的特征如:类型和大小进行读和写。所有给定记录集的Field对象形成了
一个Field集。如我将在后面向你说明的, Fields集隐藏着一个引人注目的特性,它将
再次证明Recordset对象的灵活性。
最后是Property对象。每个对象都有属性。提供的使用了ADO的对象可能是各种各样
的。但不存在这样一套属性即包含了所有可能的OLE DB提供者的静态的属性。因此,任
何一个ADO对象都有静态和动态的属性。第一套属性集:包括Name,Type,Value和Att
ributes,都可以通过如下的语法来访问:
obj.PropertyName
最开始的三个属性都是自我说明性的。Attributes是一种数字式的描述符,它是以按
位的跟提供者的能力有关的一些预定义的属性组合。(它类似于COM服务器的组件分类
)。
动态属性是跟潜在的提供者类型相应的。它们被归进Properties集合,并可以通过名
字查询。
obj.Properties(”propName”)
ADO 2.0包括一些新的功能,现在可以通过GetString方法把记录集扁平化变成一个字
符串。
Set Variant = recordset.GetString(
StringFormat,
NumRows,
ColumnDelimiter,
RowDelimiter,
NullExpr
)
所有的参数都是可选的,如下代码段所示:
Dim RS As ADODB.Recordset
Dim CONN As ADODB.Connection
Set CONN = CreateObject("ADODB.Connection")
CONN.Open “PUBS”
sql = “select * from authors”
Set RS = CONN.Execute(sql)
MsgBox RS.GetString(, 10)
RS.MoveFirst
这个例程连向大家熟悉的SQL Server PUBS数据库,将所有的作者名字提取进一个记
录集中,然后将它的最开始的10行拉直变成一个字符串。除了在Visual Basic中外,由
GetString返回的值是一个BSTR类型的变量结构。
在调用GetString时,你可以以相当大的自由度来通过指定参数来安排数据的格式。
例如:你可以改变缺省的行和列的分界符并选择只提取指定数量的行。目前,StringFo
rmat参数的值只能是adClipString,它是StringFormatEnum 列举的唯一的成员。adCl
ipString的值是2,它表示相继的参数是有效的,库应该把它们考虑进去。NumRows是将
从当前的位置开始提取的行数。NullExpr参数提供了一个选择性的字符串,以便在记录
集中遇到了NULL值时用该字符串来取代它以进行显示。
GetString方法是ADO中的对应着RDO中的GetClipString的部分。在使用GetString时
应该注意一些事情:首先,该函数返回扁平的数据。没有输出关于结构和描述标识的信
息或者是任何类似于类型表一类的东西。结果是,GetString可以用来进行单向的数据
传送,而且没有什么方法可以读回这种类型的字符串。第二,GetString向前移动记录
指针,如果你要进行进一步的处理,就把它移回来。你也要记住缺省情况下该方法是输
出整个记录集。这就意味着你你不用担心当前的记录是个无效的记录。
ADO 2.0的记录集对象中还有些其他的不大的改变。一个是ActiveCommand属性,它返
回源于给定的记录集(如果有的的Command对象。 ADO类型库定义了ActiveCommand作为
一个一般类,而不是Command对象,所以IntelliSense模块(包含于所有的Visual Stu
dio 6.0产品中)在写一些使用属性的代码时,对你没有用处。如果你添加如下的一行
。
MsgBox RS.ActiveCommand.CommandText
到前面的代码段中,你将能得到产生该记录集的SQL声明的原文。 select * from a
uthors
--
每一刻都存在,不一样的精彩
--
以科计为本,以产业报国!
超越自我,飞跃无限!
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.946毫秒