【vc++精品源码栏目提醒】:网学会员鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“vc++cess - 宣传企划”一文,供大家参考学习
直接通过 ADO 操作 Access 数据库 作者/徐景周 我在《VC 知识库在线杂志》第十四期和第十五期上曾发表了两篇文章— —“直接通过 ODBC 读、写 Excel 表格文件”和“直接通过 DAO 读、写 Access文件”,先后给大家介绍了 ODBC 和 DAO 两种数据库访问技术的基本使用方法,这次要给大家介绍的是 ADO 数据库访问技术的使用方法。
ADOActive Data Object,活动数据对象实际上是一种基于 COM组件对象模型的自动化接口IDispatch技术,并以 OLE DB对象连接和镶入的数据库为基础,经过 OLE DB 精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。
ADO 提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。
由于 ODBC 数据源也提供了一般的 OLE DB Privider,所以 ADO 不仅可以应用自身的 OLE DB Privider,而且还可以应用所有的 ODBC 驱动程序。
关于 OLE DB 和 ADO 的其它详细情况,读者可以自行查阅相关书籍或 MSDN,这里就不一一说明了。
让我们直接步入主题:如何掌握 ADO 这种数据库访问技术。
ADO 的操作方法和前面讲过的 DAO 的操作在很多方面存在相似之处,在这里,笔者为了更有效的说明它的使用方法,用 VC6.0 做了一个示例程序——AdoRWAccess,这个示例程序可以直接通 过 ADO 来操作 Access 数据库,示例程序的运行效果如下图所示:在示例程序中我们仍采用原库结构,数据库名 Demo.mdb,库内表名 DemoTable,表内字段名为 Name姓名和 Age年龄的两个字段,来构造示例程序操作所需的 Access 数据库,这也和上两篇文章的示例源码中的库结构相兼容。
下面让我们看看 ADO 数据库访问技术使用的基本步骤及方法: 首先,要用import 语句来引用支持 ADO 的组件类型库.tlb,其中类型库可以作为可执行程序DLL、EXE 等的一部分被定位在其自身程序中的附属资源里,如:被定位在 msado15.dll 的附属资源中,只需要直接用import 引用 它既可。
可以直接在 Stdafx.h 文件中加入下面语句来实现:import c:program filescommon filessystemadomsado15.dll no_namespace rename EOF adoEOF其中路径名可以根据自己系统安装的 ADO 支持文件的路径来自行设定。
当编译器遇到import 语句时,它会为引用组件类型库中的接口生成包装类,import 语句实际上相当于执行了 API 涵数 LoadTypeLib。
import 语句会在工程可执行程序输出目录中产生两个文件,分别为.tlh类型库头文件及.tli类型库实现文件,它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID 等进行声明,创建一系列包装方法。
语句 no_namespace 说明 ADO 对象不使用命名空间,rename EOF adoEOF说明将 ADO 中结束标志 EOF 改为 adoEOF,以避免和其它库中命名相冲突。
其次,在程序初始过程中需要初始化组件,一般可以用 CoInitializeNULL来实现,这种方法在结束时要关闭初始化的 COM,可以用下面语句 CoUnInitialize来实现。
在 MFC 中还可以采用另一种方法来实现初始化 COM,这种方法只需要一条语句便可以自动为我们实现初始化 COM 和结束时关闭 COM 的操作,语句如下所示: AfxOleInit 接着,就可以直接使用 ADO 的操作了。
我们经常使用的只是前面用import 语句引用类型库时,生成的包装类.tlh 中声明的智能指针中的三个, 它们分别是_ConnectionPtr、_RecordsetPtr 和_CommandPtr。
下面分别对它们的使用方法进行介绍:1、_ConnectionPtr 智能指针,通常用于打开、关闭一个库连接或用它的 Execute 方法来执行一个不返回结果的命令语句用法和_CommandPtr 中的 Execute 方法类似。
——打开一个库连接。
先创建一个实例指针,再用 Open 打开一个库连接,它将返回一个 IUnknown 的自动化接口指针。
代码如下所示:_ConnectionPtr m_pConnection// 初始化 COM创建 ADO 连接等操作AfxOleInitm_pConnection.CreateInstance__uuidofConnection// 在 ADO 操作中建议语句中要常用 try...catch来捕获错误信息,// 因