使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。
之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。
OLE DB 是一组”组件对象模型” COM 接口,是新的数据库低层接口,它封装了 ODBC 的功能,并以统一的方式访问存储在不同信息源中的数据。
OLE DB 是 Microsoft UDAUniversal Data Access策略的技术基础。
OLE DB为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、 自定义业务对象等等。
也就是说,OLEDB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。
在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件、 目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。
但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。
您需要的 API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是ActiveX Data Objects ADO。
、命令 总的来说ADO模型包括了下列对象:连接(Connection)Command、记录集 Recordset、字段 Field、参数 Parameter、错误 Error、属性 Property、集合 、事件.它们之间的关系如下图: Connection Errors Error Command Parameters Parameter Recordset Fields Field1 我们最常用的主要是Connection、Recordset 及Command这三个对象.2对于访问一个数据库来说,我们一般先建立一个ADO连接.3ADO连接可以直接执行SQL语句来操纵数据库,但如果我们要对数据在应用程序和数据源之间进行存取的话,就需要用到记录集对象。
一个ADO连接可以有多个ADO连接,但一个ADO连接一般只能对应一个且必须对应一个ADO连接.4另外如果你可进行更高级别的访问的话还可能要用到命令对象。
例如要调用存储过程等。
5一个记录集包含有一个字段集,一个字段集则包含有多个字段对象。
6同样一个命令对象也包含一个参数集,一个参数集则包含有多个参数对象。
7连接对象也有一个错误集并包含有多个错误对象。
这就是ADO各对象之间大致的关系.3.ADO接口简介 ADO只需要9个对象和4个集合就能完成数据库操作的几乎全部功能。
由于ADO是基于COM的,因此我们在使用ADO时也应该从它提供的借口出发寻找访问数据库的方法。
ADO库提供三个基本接口: __ConnectionPtr接口 __CommandPtr接口 __RecordsetPtr接口__ConnectionPtr接口: __ConnectionPtr接口返回一个记录集或一个空指针。
通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
用__ConnectionPtr接口返回一个记录集不是一个好的使用方法。
通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。
__ConnectionPtr接口: __CommandPtr接口返回一个记录集。
它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
在使用__CommandPtr接口时,可以利用全局__ConnectionPtr接口,也可以在__CommandPtr接口里直接使用连接串。
如果只执行一次或几次数据访问操作,后者是比较好的选择。
但如果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局__ConnectionPtr接口创建一个数据连接,然后使用__CommandPtr接口执行存储过程和SQL语句。
__RecordsetPtr接口: __RecordsetPtr是一个记录集对象。
与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。
同__CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给__RecordsetPtr的connection成员变量,让它自己创建数据连接。
如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局—ConnectionPtr接口,然后使用__RecordsetPtr执行存储过程和SQL语句。
4.使用__ConnectionPtr接口 __ConnectionPtr是一个连接接口,它类似于CDatabase和CDaoDatabase。
首先创建一个__ConnectionPtr接口实例,接着指向并打开一个ODBC数据源或OLE DB数据提供者Provider。
以下代码分别创建一个基于DSN和非DSN的数据连接。
//使用__ConnectionPtr基于DSN __ConnectionPtr MyDb MyDb.CreateInstance__uuidofConnection MyDb-〉OpenDSNsampUIDadminPWDadmin-1 //使用—ConnectionPtr 基于非DSN __ConnectionPtr MyDb MyDb.CreateInstance__uuidofConnection MyDbOpenProviderSQLOLEDB SERVERserver DATABASEsamp UIDadmin PWDadmin -15.使用__RecordsetPtr接口 __RecordsetPtr接口的使用方法和CDaoDatabase类似,通过以下代码的比较,你会发现使用—RecordsetPtr接口非常简单以下代码使用上面已经创建的数据连接: //使用CDaoDatabase执行SQL语句 CDaoRecordset MySet new CDaoRecordsetMyDb MySet-〉OpenAFX__DAO__USE__DEFAULT__TYPE SELECT FROM t__samp Now using ADO: //使用__RecordsetPtr执行SQL语句 __RecordsetPtr MySet MySet.CreateInstance__uuidofRecordset MySet-〉OpenSELECT FROM some__table MyDb.GetInterfacePtr adOpenDynamic adLockOptimistic adCmdText 现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。
从以下代码可以看到,使用ADO的__RecordsetPtr接口,就不需要像DAO那样频繁地使用大而复杂的数据结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。
假定程序有一个名称为m__List的ListBox控件,下面代码我们用__RecordsetPtr接口获取记录集数据并填充这个ListBox控件: //使用ADO访问数据 __variant__t Holder trywhileMySet-〉adoEOF Holder MySet-〉GetCollectFIELD__1 ifHolder.vtVT__NULL m__List.AddStringchar__bstr__tHolder MySet-〉MoveNext catch__com__error e CString Error e-〉ErrorMessage AfxMessageBoxe-〉ErrorMessage catch... MessageBoxADO发生错误 必须始终在代码中用try和catch来捕获ADO错误否则ADO错误会使你的应用程序崩溃。
当ADO发生运行错误时如数据库不存在,OLE DB数据提供者将自动创建一个__com__error对象,并将有关错误信息填充到这个对象的成员变量。
6.使用__CommandPtr接口 __CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例使用__CommandPtr接口的方法: //使用__CommandPtr接口获取数据 __CommandPtr pCommand __RecordsetPtr MySet pCommand.CreateInstance__uuidofCommand pCommand-〉ActiveConnectionMyDb pCommand-〉CommandTextselect from some—table pCommand-〉CommandTypeadCmdText pCommand-〉Parameters-〉Refresh MySetpCommand-〉ExecuteNULLNULLadCmdUnknown __variant__t TheValue MySet-〉GetCollectFIELD__1 CString sValuechar__bstr__tTheValue4.3.2 使用 ADO 接口步骤1.引入ADO库文件 使用ADO前必须在工程的 stdafx.h 文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。
代码如下所示:#import c:program filescommon filessystemadomsado15.dllno_namespaces renameEOF adoEOF 这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免冲突,将EOF改名为adoEOF。
2.初始化OLE/COM库环境 必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。
上一篇:
【精品】C++算法之石头剪子布
下一篇:
法律专业开题报告范文