AccessODBCAccess!"#$%!"#ODBC!"#ODBC!"#$!"#$ODBC32.DLLSQLServerODBCSQLServer!"#$%!"#:1008-0570(2006)04-3-0256-03VC++中数据库访问技术研究(衡阳师范学院)王樱徐雨明Wang,YingXu,Yuming摘要:结合VC++讨论并比较了当前流行的几种数据库访问技术:ODBC,DAO,OLE/DB和ADO。在简要叙述其原理后,说明了三种数据库访问技术各自的优缺点,并给出了基本使用方法。关键词:数据库访问;ODBC;DAO;OLE/DB;ADO;:TP311文献标识码:AAbstract:CombiningwithVC++,thisdiscussesandcomparesseveralkindsofdatabaseaccesstechniquesthatarepopularatnowadayssuchasODBC,DAO,OLE/DBandADO,afterdepictingbrieflytheirprinciples,itexplainstheirmeritsandshortconingsofeverykindsofthesetechniques,givestheirbasicusemethods.Keywords:databaseaccessing;ODBC;DAO;OLE/DB;ADO;库应用程序遵循一定的基本步骤:引言笔者最近将用VC++开发一个管理系统,要使用数据库对所需的数据进行存储与管理。VC++提供了几种接口(DAO、OLE/DB、ADO、ODBC)来支持数据库编程,利用这些接口,可以在程序中直接操作各种各样的数据库,如SQLServer、MicrosoftAccess、MicrosoftFoxPro等等。采用以上几种接口访问数据库各有千秋,所以在进行数据库编程前,有必要对VC++中提供的各种技术有所了解,从而进行数据库技术的选定。1开放数据库连接(ODBC)1.1ODBCAPIODBC(OpenDatabaseConnectivity)其实是Mi-crosoft的WOSA(Windows开放服务体系)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编接口)。通常ODBC主要由ODBC驱动程序管理器、ODBC数据库驱动程序、ODBC数据源和ODBC应用四部分组成。ODBC体系的特点是:通过统一的接口实现对DBMS的访问,使用不同的ODBC驱动程序可以保证数据库的独立性。例如用ODBC访问Access和SQLServer数图1ODBC访问多种数据库第一步是分配ODBC环境,使一些内部结构初始化。完成这一步,须分配一个SQLHENV类型的变量在ODBC环境中做句柄使用。第二步是为将要使用的每一个数据源分配一个连接句柄,由函数SQLALLocHandle()完成。第三步是使用SQLConnect()把连接句柄与数据库连接,可以先通过SQLSetConnectAttr()设置连接属性。然后就可以进行SQL语句的操作。操作完成后,用户取回相应的结果,就可以取消与数据库的连接,最后需要释放ODBC环境。1.2MFCODBC虽然ODBC提供了访问数据库的接口,但是直接使用ODBCAPI创建应用程序需要编制大量的代码,而MFCODBC数据库类将ODBCAPI函数进行了封装,这就大大简化了ODBC数据库开发的编程工作。MFCODBC实际上使用的是一个简化的编程模型,因此,程序员无须考虑底层的很多细节,只需以简单易用的CDatabase、CRecordset、CRecordView等类来实现ODBC的功能。利用MFCODBC开发就是利用MFCODBC数据库类来操纵ODBC数据源。在Visual据库,不需改变ODBC应用程序调用数据源的代码,仅需改变ODBC中数据源的配置。这样,就可避免ODBC应用程序直接与数据源打交道。如图1所示。在使用ODBCAPI时,用户须引入的头文件为"sql.h","sqlext.h","sqltypes.h"。用ODBCAPI创建数据王樱:硕士讲师基金资助:湖南省教育厅科研项目(04c142)个同数据源的连接是操作ODBC数据源的基础数据库数据仓库数据挖掘CRecordset类代表从数据源中选择一组记录的集合,它是操作数据源的工具。CRecordset类提供了应用程序与数据交互的实质。CRecordset类用来封装对数据库的查询,包括添加、修改、删除行。要注意的是在应用程序中,一般不直接使用CRecordset类,而是使用其派生类。如果你没有自己的派生类,就几乎不可能使用CRecordset类对象。因为CRecordset类为你派生出的类提供了一个框架,当使用MFCClassWizard产生一个CRecordset类的派生类时,MFCClassWizard会自动添加相应数据库表中字段的成员变量,并自动重载CRecordset类的成员函数DoFieldExchange(),通过使用RFX函数来完成数据库字段与记录集字段数据成员变量的数据交换。生成派生类的步骤如下:(1)通过添加类向导从CRecordset类派生类。(2)指定记录集的字段数据成员。(3)在向导生成的字段数据成员后面添加参数数据成员,一般添加后缀“param”。(4)...