基于Visual C++的OLE DB技术

OLE DB是Microsoft开发的一种高性能的、基于COM的数据库连接技术。OLE DB 和其他Microsoft数据库连接技术的不同之处在于其提供通用数据访问的能力。所谓的通用数据访问一般具备两种功能:其一是“分布式查询”或统一访问多(分布式)数据源的功能;其二是让非DBMS数据源能被数据库应用程序访问的功能。
分布式查询
即统一访问多(分布式)数据源数据的能力。数据源既可以为同一类型(例如两个单独的Access数据库),也可以为不同类型(例如一个SQL Server数据库和一个Access数据库),“统一”表示可以有目的地对所有数据源运行相同的查询。

非DBMS访问

即让非DBMS数据源能被数据库应用程序访问的能力。DBMS 数据源的例子有 IMS、DB2、Oracle、SQL Server、Access以及Paradox等;非DBMS数据源的例子有存储于文件系统、电子邮件、电子表格及项目管理工具等的信息。

下面以一个方案为例,在该方案中,销售部门需要查找一周中所有来自某一地区的客户的电子邮件。该查询可能需要对电子邮件应用程序的邮箱文件进行搜索,对客户Access表进行搜索,以确认客户名。其中,Access是一个DBMS应用程序,而Outlook则是非DBMS应用程序。对于这种情况,可以使用OLE DB。

OLE DB支持开发能访问各种数据源的应用程序,无论是DBMS还是非DBMS数据源,OLE DB 通过使用支持某一给定数据源相应的DBMS功能的COM接口,使得对数据源的通用访问成为可能。COM不仅在数据源之间而且在其他各种应用程序之间减少了不必要的服务重复,同时使它们之间的交互操作达到最大限度。

Visual C++通过OLE DB数据使用者模板来简化用户使用OLE DB接口的代码,让用户能够轻松访问OLE DB功能,并与ATL和MFC轻松集成。OLE DB使用者使用若干种对象,下面对这些对象进行简单描述。

数据源和会话

CdataSource类:这个类用来实例化数据源对象,该对象通过OLE DB提供程序创建和管理与数据源的连接。数据源以连接字符串的形式保持数据源地址和身份验证等信息。

另外值得注意的是,在建立任何连接之前一般会使用帮助类里的Cenumerator类来获取系统中注册的可用提供程序列表。这使您可以选择一个提供程序作为数据源。例如,“数据链接属性”对话框使用此类填充“提供程序”选项卡中的提供程序列表,如图5.5所示
在这里插入图片描述
CSession类:这个类用来实例化会话对象,会话对象用来表示与数据源的单个访问会话。会话是负责事务处理的基本单位,一般来说可以在一个数据源上创建多个会话。对于每个会话,可以创建行集合、命令和其他对象以访问数据源中的数据。

访问器和行集合

访问器和行集合类是OLE DB提供给用户用来设置和检索数据的工具。用户采用不同的访问器可以对行集合进行动态或者静态的访问;行集合用来存储用户查询结果。根据不同应用的要求和用户对数据库结构是否确定而应采用不同的行集合来存储结果。一般来说,用得比较多的访问器有:
CAccessor访问器:如果在设计时知道数据库的结构,则使用此访问器。CAccessor将包含缓冲区的数据库记录静态绑定到数据源。
CDynamicAccessor访问器:如果在设计时不知道数据库的结构,则使用此访问器。当系统运行时,可以动态地从行集合中获得列的信息,根据此信息动态地创建访问器。
CDynamicParameterAccessor访问器:可以使用此访问器处理未知的命令类型。在准备命令时,如果提供程序支持 ICommandWithParameters,CDynamicParameterAccessor 就可以从 ICommandWithParameters 接口获取参数信息。
CManualAccessor访问器:该访问器用以在程序运行时将列与变量绑定或者将参数与变量绑定。

相应的,OLE DB提供以下3种行集合类:
CRowSet类:封装了行集合对象和相应的接口,并且提供了一些方法用于查询、操作数据等。可以用Move()等函数进行记录移动,用GetData()函数读取数据,用Insert()、Delete()、SetData()来更新数据。
CBulkRowset类:用于在一次调用中取回多个行句柄或者对多个行进行操作。
CArrayRowset类:提供用数组下标进行数据访问的能力。

命令和表

命令类CCommand和表类CTable主要用来执行SQL命令、查询并打开行集合或者绑定列。命令类、表类和访问器、行集合的关系如图5.6所示。
在这里插入图片描述
如果只是打开一个表集合,可以使用CTable类。通常此类用于打开未指定任何参数并且不需要多个结果的简单行集合,用户通过该类打开数据源中指定的一个表。

如果是执行其他复杂命令,如插入、更新或者多表联合查询,则需要改用 CCommand类。在调用CCommand类执行命令前,必须先调用Open函数打开结果集。

CCommand具有3个模板参数:访问器类型、行集合类型和结果类型(默认情况下为CNoMultipleResults或CMultipleResults)。如果指定CMultipleResults,则CCommand 类将支持IMultipleResults 接口并处理多个行集合。

用户记录

若要使用静态访问器,即从Caccessor类派生的访问器,则使用者必须具有用户记录。

用户记录是包含用于处理输入或输出的数据元素的C++类。“ATL OLE DB使用者向导”为使用者生成用户记录。您可以向用户记录中添加方法以处理一些可选任务,如处理命令等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值