扫描索引和访问表时DATA FILE和DB BUFFER之间的I/O单位为1 BLOCK。应先了解以下各种表和索引的概念,充分考虑后再进行管理。因此,索引的行数始终小于或等于表的行数。索引和表是独立的对象,事务影响不大时可根据需要随时删除、变更索引。3)表访问如果用于查找条件的列已生成为索引,并且判断应用该索引时更快,则会通过扫描索引访问表。......
2023-11-01
基于COM的Visual C++数据库访问机制研究
武汉东湖学院计算机科学学院 袁 琼
文章描述了基于COM的Visual C++两种高级数据库访问技术OLEDB和ADO的机制,对二者的特点、性能、差异以及使用进行了探讨。
一、引言
Visual C++6.0提供了多种多样的数据库访问技术——ODBC(Open DataBase Connectivity)、MFC ODBC(Microsoft Foundation Classes ODBC)、DAO(Data Access Object)、OLE DB(Object Link and Embedding DataBase)和ADO(ActiveX Data Object)。这些技术各有各的特点,但都提供了简单、灵活、访问速度快、可扩展性好的特点,可用于访问不同种类数据源。
MFC ODBC 和DAO 是基于MFC的数据库访问技术,对较复杂的ODBC API进行了封装,提供了简化的调用接口,大大方便了数据库应用程序的开发。程序员不必了解ODBC API和SQL的具体细节,即可完成对数据库的大部分操作。不同的是,MFC ODBC通过ODBC和ODBC驱动程序操作数据;而MFC DAO通过Microsoft Jet访问数据,具有更强的处理能力。MFC DAO同MFC ODBC相比,具有的优势是:特别在处理Microsoft Jet数据库的时候,能够优化性能;与ODBC、Microsoft Access Basic和Microsoft Visual Basic兼容;提供对数据库操作的合法性判断;能够确认数据表之间的关系;具有更加丰富的操作模型。但是,MFC DAO也存在一些缺点,例如运行中对象占用相对多的内存空间。
OLE DB和ADO 是基于COM(Component Object Model)的数据库访问技术,是VisualC++开发数据库应用中提供的新技术,比传统数据库访问技术更加优越。
本文主要介绍OLE DB和ADO,对二者的数据库访问机制、技术特点、性能和差异,以及使用进行研讨。
二、OLE DB数据库访问技术
OLE DB比传统的数据库访问技术更加优越的是:它基于COM接口,对所有的文件系统包括关系数据库和非关系数据库都提供了统一的接口。与ODBC技术相似,OLE DB属于数据库访问技术中的底层接口,直接使用它来设计数据库应用程序需要编写大量的代码。为此,Visual C++提供了ATL模板,用于设计OLE DB数据提供程序和数据应用程序。
(一)OLE DB应用程序的结构
OLE DB数据库应用程序的基本结构如下(图1):
图1 OLE DB数据库应用程序的基本结构
当数据使用者需要对数据库进行操作时,数据使用者并非直接对数据源发出指令,而是通过OLE DB接口与数据库提供者进行交互。数据提供者从数据源取得所要查询的数据时,以表格的形式将其提供给接口,然后由数据使用者从接口取出并使用。
(二) OLE DB对象
OLE DB是由几种COM对象组成,包括7个基本的对象(枚举器(Enumerator)、数据源对象(Data Source Object)、会话(Session)、事务(Transaction)、行集(Rowset)、错误(Error)和命令(Command))。其中,每个对象又包含若干个接口,这些对象和接口的定义是依照COM模型制定的。
枚举器:用于搜寻可用的数据源。
数据源对象:包含与数据源连接的方法、产生会话。
会话:为事务处理提供上下文环境,生成事务、命令和行集。
事务:用于管理数据库的事务,将多个操作合并为一个单一的事务处理。
命令:用于对数据源发送文本命令。
行集:以表的形式显示数据,完成更新、插入、删除等操作。
错误:含有访问数据时产生的错误的信息。
OLE DB应用程序的对象流程如下(图2):
图2 OLE DB应用程序的对象流程
(三)ATL模板
ATL是ActiveX Template Library的缩写。ATL是为COM应用而开发的,是一个产生C++/COM代码的框架。ATL提供了一套基于模板的C++类,通过这些类,可以很容易地创建一个小型的、快速的COM对象。使用ATL能够快速地开发出高效、简洁的代码,同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。
ATL提供的数据库访问COM接口是对OLE DB API的包装,属于高级的数据库编程接口。ATL提供的数据库访问COM接口主要是如下的几个类。
CDataSource类:该类用于创建一个连接OLE DB客户程序和OLE DB供应程序的数据源对象,常用于向供应程序发送连接数据源名称、用户ID以及口令等属性,在属性建立以后,就可以调用该类的Open方法,打开一个通往OLE DB供应程序的数据连接。
CSession类:该类对象表示了一个客户程序同供应程序的一次对话,通过该对象,可以得到一个命令、事务处理或者行集对象。
CCommand类:该类对象处理数据的操作,可以处理参数化和非参数化的语句。
CRowset类:该类对象代表了来自数据源的数据,用来包含和维护数据。
CAccssor类:该类对象描述了存储在OLE DB用户程序的存储器,通常被定义为行集存储和传输数据,也能由供应程序控制把用户变量绑定到返回数据。
为了应用ATL模板类,必须使用ATL Object Wizard引入ATL产生的模板类。
(四)OLE DB应用程序创建和访问数据库的方法
OLE DB应用程序创建和访问数据库的方法有两种:
(1)以MFC AppWizard(exe)为向导建立应用程序框架,添加对OLE DB支持的头文件,然后使用OLE DB类进行数据库应用开发;
(2)以ATL COM AppWizard为向导建立应用程序框架,该框架直接支持OLE DB的模板类,不需要添加任何头文件。该方法的缺点是,只能为应用程序添加对话框资源,不能使用窗口资源,限制了应用程序的界面开发。
三、ADO数据库访问技术
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术。ADO技术基于COM,具有COM组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库及所有的文件系统。另外,ADO还支持各种客户同173页服务器模块与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,是远程数据存取的发展方向。(www.chuimin.cn)
(一)ADO同OLE DB、数据库应用以及数据源之间的关系
ADO同OLE DB、数据库应用以及数据源之间的关系可以用下图来表示(图3):
图3 ADO同OLE DB、数据库应用以及数据源之间的关系
(二)ADO对象
ADO中所提供的对象只用于数据应用程序。在ADO对象中使用了OLE DB服务提供程序和OLE DB数据提供程序所提供的接口和服务,ADO对象的结构图如下(图4):
图4 ADO对象的结构
可以看出,ADO模型包含了7种对象,4种集合。
连接(Connection)对象:通过该对象操作数据源。
命令(Command)对象:使用该对象可以查询数据库并返回一个Recordset对象,执行一个批量的数据操作。
参数(Parameter)对象:Parameter对象在Command对象中用于指定参数化查询或者存储过程的参数。
记录集(Recordset)对象:通过Recordset对象可以操纵来自数据提供者的数据,包括修改和更新行、插入和删除行。
域(Field)对象: Recordset对象的一行由一个或多个Fields对象组成,为了修改数据源里的数据,必须首先修改Recordset对象各个行里Field对象里的值,最后Recordset对象将这些修改提交到数据源。
错误(Error)对象:Error对象包含了ADO数据操作时发生错误的详细描述。
属性(Property)对象:Property对象代表了一个由提供者定义的ADO对象的动态特征。
(三)ADO访问数据库的方法及步骤
VisualC++6.0为ADO操作提供了库支持,借助import宏将该库文件引用到工程里产生所有ADO对象的描述和声明,即可进行数据库应用开发。
ADO访问数据库的方法及步骤如下。
(1)创建一个Connection对象。
(2)打开数据源,建立同数据源的连接。
(3)执行一个SQL命令。一旦连接成功,就可以运行查询了。可以以异步方式运行查询,也可以异步地处理查询结果,ADO会通知提供者后台提供数据。这样可以让应用程序继续处理其他的事情而不必等待。
(4)使用结果集。完成了查询以后,结果集就可以被应用程序使用了。在不同的光标类型下,可以在客户端或者服务器端浏览和修改运行数据。
(5)终止连接。当完成了所有数据操作后,可以销毁这个同数据源的连接。
四、ADO与OLE DB的比较
ADO相比OLE DB具有的特点:
(1)便于使用;
(2)支持多种编程语言,包括Visual Basic、Java、C++、VBScript和JavaScript;
(3)支持任何的OLE DB的服务器,ADO可以操作任何的OLE DB数据源;
(4)不损失任何OLE DB的功能,ADO支持C++编程人员操作底层的OLE DB接口;
(5)可扩展性,ADO能够通过提供者属性集合动态地表示指定的数据提供者,还能够支持COM的扩展数据类型。
五、结语
Visual C++提供的访问数据库新技术OLE DB和ADO,由于它们是基于COM——组件对象模型,因此能够充分发挥COM标准的优势,不仅具有客户/服务器模型特性,还具有语言无关性,进程透明性和可重用机制。
OLE DB对数据库的访问,不再基于关系型数据库,而是几乎适用于所有的线性模型;DAO作为建立在OLE DB上层的自动化对象库,可以广泛运用于各种脚本语言,为脚本语言访问数据库提供了极大的便利。
OLE DB/DAO以COM方式为数据库访问提供了一致的接口,被广泛运用于微软的各种产品中,必将会得到进一步的发展。
【参考文献】
[1] 夏云庆.Visual C++6.0数据库高级编程[M].北京:北京希望电子出版社,2002.
[2] 成功等.VC中几种数据库访问技术的比较与选择[J].计算机应用研究,2002(2).
[3] 黄陇等.基于MFC的VisualC++数据库访问机制研究[J].计算机与网络,2003(15).
[4] 俞建等.数据库访问技术研究[J].计算机与现代化,2004(10).
有关武汉东湖学院论文集的文章
扫描索引和访问表时DATA FILE和DB BUFFER之间的I/O单位为1 BLOCK。应先了解以下各种表和索引的概念,充分考虑后再进行管理。因此,索引的行数始终小于或等于表的行数。索引和表是独立的对象,事务影响不大时可根据需要随时删除、变更索引。3)表访问如果用于查找条件的列已生成为索引,并且判断应用该索引时更快,则会通过扫描索引访问表。......
2023-11-01
系统软件使用CFG_ADDR和CFG_DATA寄存器访问PCI设备的配置空间,而使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断向量,HOST主桥这3个寄存器的地址偏移和属性如表2-1所示。当该位为1时,HOST主桥使能对PCI设备配置空间的访问,当HOST处理器对CFG_DATA寄存器进行访问时,HOST主桥将对这个寄存器的访问转换为PCI配置读写总线事务并发送到PCI总线上。下面以源代码2-1为例说明PowerPC处理器如何访问PCI配置空间。......
2023-10-20
从访谈结果分析中构建并拓展理论。通过访谈事件研究分析,表明旅游服务破坏行为对游客不公平行为和游客攻击行为有驱动影响,但旅游服务破坏行为对游客不文明行为影响不显著。本研究有5个访谈事件,都是旅游服务人员的服务破坏行为诱发了游客不公平行为。......
2023-11-17
强制安全策略采用通过集中授权施加以规则为基础的访问控制。一个访问类c1的级别大于等于另一个访问类c2,则称为c1支配c2。基于保密强制策略:是为了保护数据机密性。强制策略的最大缺陷是它们只能控制通过公开通道的信息流,即合法途径操作的通道。主体提交的访问请求按以下两条原则进行评估。例如,假设有两个完整性级别Crucial和Important,且C>I,同时和主体与对象关联的分类集合是{Admin,Medical}。......
2023-10-28
唐前《汉书》研究者多于《史记》研究者,对于形成这一局面的原因,有学者从文学角度作了分析,唐司马贞《史记索隐序》云:《史记》比于班《书》,微为古质,故汉晋名贤未知见重。此一时期的研究主要建立在唐前的研究基础之上,刘知几、司马贞、张守节等学者对张辅以繁简论优劣的观点作了进一步的分析和探讨。刘知几在《史通》里有《班、马异同论》,专门论述两书异同。(三)对《史记》、《汉书》的叙事大都予以肯定。......
2023-08-20
新的访问控制解决方案应当允许哪些请求者被授权访问资源,同时了解哪些服务器拥有所请求的资源。基于信任的访问控制模型的发展和有效使用还要求解决与信任管理、公开策略、信任委派及回收、信任链建立等相关的问题,尤其是下述问题。结果访问控制机制不能简单地返回许可或否定询问者,应当能够询问的最终用户需要哪种资源的信任。......
2023-10-28
在数据库安全里,访问控制扮演着重要角色。访问控制就提供这种保护功能。访问控制系统需要关注三个方面:访问控制策略、访问控制模型和访问控制机制。访问控制策略定义高级规则,用于核实访问请求是否被核准或拒绝。访问控制策略通过访问控制模型来实现规范,通过访问控制机制来强制实施。这样,访问策略改变后,访问控制机制依然有效。访问控制系统主要具有如下特征。这些特征给访问控制机制的设计与开发迎来了新的挑战。......
2023-10-28
SQL Server的安全性机制一般主要包括3个方面。登录账户可以是Windows账户或组,也可以是SQL Server的登录账户。在创建数据库对象时,SQL Server将自动把该数据库对象的拥有权赋予该对象的拥有者。......
2023-11-23
相关推荐