摘 要:本文介绍了微软推出的以ActiveX技术为基础的ADO数据存取技术,分析了ADO的工作原理,并用Visual C++说明了ADO数据访问技术的实现方法。
关键字:ADO;连接对象;OLE DB;数据存取;记录集
ADO(ActiveX Date Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术。ADO技术基于COM(Component Object Model),具有COM组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问包括关系数据库、非关系数据库及所有的文件系统。另外,ADO还支持各种客户/服务器模块与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,是远程数据存取的发展方向。
1 ADO的工作原理
ADO封装了OLE DB所提供的接口,是基于OLE DB模型之上的更高层应用,比起OLE DB提供者,ADO的接口可以使程序员在更高级别上同数据交互,并且保留了MFC/ODBC和DAO的特性。ADO技术不仅可以应用于关系数据库,也可以应用于非关系数据库。可以用统一的方法对不同的文件系统进行访问,大大简化了程序编制,增加了程序的可移植性。
1.1 ADO的对象
ADO接口是基于对象集合的,通常比OLE DB对象使用简单。ADO对象不依靠对象层次,大多数情况下,可以简单地创建并只使用需要处理的对象,而不必担心创建许多其他的“父”对象。
1.2 ADO编程模型[3]
ADO中的编程模型一般由一个动作序列组成。ADO提供了一组类,可以简化在C++代码中建立这种序列的处理。
1)接到一个数据源。
2)定对该数据源的一个查询。
3)执行该查询。
4)把查询数据检索到一个能够在C++代码中很容易访问的对象中。
5)如果需要,则更新该数据源,以反映对该数据的编辑。
6)提供检测错误的一般方法。
一般来说,我们需要使用上面提到的ADO编程模型中的所有步骤。但是ADO具有很大的灵活性,根据需要也可以只使用模型中的一部分。例如,我们可以创建一个新的记录集对象,并在代码中为其赋值,不必连接到某个数据源,也不必执行任何查询语句,甚至还可以把记录集对象传送给其它过程或应用程序。
2 用Visual C++开发ADO应用程序
使用Visual C++6.0为开发ADO应用程序而提供的动态链接库来开发数据库应用程序,可以灵活地控制应用程序。在进行ADO编程之前我们先建立一个Access数据库MyProject.mdb。
Visual C++中ADO编程的基本步骤和具体方法。
1)生成应用程序框架并初始化OLE/COM库环境
我们可以使用AfxOleInit()来初始化OLE/COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,代码如下:
BOOL CADOTestInstance() { AfxOleInit();…}
2)引入ADO库文件
Visual C++中通过在程序中使用预编译指令#import来告诉编译器将此指令中指定的动态链接库引入工程中,并从动态链接库中取出其中的对象和信息,产生msado15.tlh和ado15.tli两个头文件来定义ADO库。
在stdafx.h中加入如下语句:
#import
"c:/program files/common files/system/ado/msado15.dll"
no_namespace
rename("EOF","adoEOF")
程序的第三行指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。第四行代码将ADO中的EOF(文件结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。
值得注意的是您的环境中msado15.dll不一定在这个目录下,请按实际情况修改。另外,在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
3)创建ADO与数据源的连接
ADO与数据源的连接是通过连接智能指针来创建的。
首先我们需要添加一个指向Connection对象的指针,然后调用CreateInstance()来创建一个连接对象的实例,再调用Open()函数来创建与数据源的连接。
创建ADO的连接,首先要设置ADO连接对象的ConnectionString属性,该属性提供所要连接的数据库类型、数据所处服务器、要访问的数据库和数据库访问的安全认证信息。比较专业的方法是在ConnectionString中直接提供以上信息。其大致过程如下:
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
m-pConnection->Open ("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=MyProject.mdb","","",adModeUnknown);//连接数据库
在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型:
HRESULT Connection15::Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
其中,ConnectionString为连接字串,UserID是用户名, Password是登陆密码。
可以看出上述的连接属性设置标准随着数据源的类型不同而变化,软件用户常常不习惯这种设置方式,都希望有可视化的数据源设置方法。为此Microsoft提供了通用数据连接文件(.UDL)来建立和测试ADO连接属性,可以和ODBC一样可视化地定义要连接的数据源,从而实现数据访问的透明性。ADO连接对象可以很方便地使用UDL文件来连接数据源,下面的例子使用mydata.udl来创建ADO连接。
_ConnectionPtr m_pDBConnect;
m_pDBConnect.CreateInstance(__uuidof(Connection));
m_pDBConnect->ConnectionString ="File Name=c:/mydir/mydata.udl";
m_pDBConnect->Open("","","",NULL);
这样一来无论数据源如何变化,在软件中都可以用统一的方法编程。当数据源改变时,只要双击相应的udl文件即可可视化地设置数据源,无需更改软件。
在你所想创建UDL文件的目录中单击右键,选择新建|Microsoft 数据连接,然后将新创建的UDL文件更改为你所希望的文件名(.UDL扩展名不能改变)。如果操作系统是Windows 2000,先创建一个文本文件,再将该文本文件的扩展名改为 "udl",然后双击所创建的UDL文件,即可视化地完成数据源的设定。
4)执行SQL命令并取得结果记录集
为了取得结果记录集,我们定义一个指向Recordset对象的指针,并为其创建Recordset对象的实例:
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
在ADO中,可以有两种不同的方法执行命令,第一种是调用连接对象的Execute()函数,第二种是使用命令对象,这种方法可以用于更复杂的命令处理和使用参数化命令,下面我们逐一进行阐述。
① 利用Connection对象的Execute方法执行SQL命令
Execute方法的原型如下所示:
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )
其中,CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一:
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一个表名
adCmdProc:表明CommandText是一个存储过程
adCmdUnknown:未知
Execute执行完后返回一个指向记录集的指针。
下面以一个执行SQL以建立一张学生信息的表的例子说明如下:
_variant_t RecordsAffected;
m_pConnection->Execute("CREATE TABLE myTable(StuID INTEGER,StuName TEXT,Old INTEGER,Birthday DATETIME)",&RecordsAffected,adCmdText);
② 利用Command对象来执行SQL命令
当要执行复杂的命令以及执行带参数的命令时,要使用命令对象对数据源进行操作,这需要创建命令对象并使用命令对象所提供的函数。具体过程如以下代码所示:
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command"); //创建一个命令对象
m_pCommand->ActiveConnection = m_pConnection;
//将建立的连接赋值给它
m_pCommand->CommandText = "SELECT * FROM myTable";
//指定要执行的SQL命令字符串
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
//执行命令,取得记录集
5)记录集的遍历、更新
ADO提供了在记录集中增加、删除和移动记录的方法,用这些方法可以很方便地遍历和更新记录集。这些方法的使用跟MFC数据库类的方法类似,这里就不再一一说明。
6)关闭记录集与连接
记录集或连接都可以用Close方法来关闭。
m_pRecordset->Close();//关闭记录集
m_pConnection->Close();//关闭连接
读到此处相信读者已经熟悉ADO操作数据库的大致流程了,最后值得指出的是因为ADO是COM接口,为了软件的可靠性,在打开ADO连接时,应该加入异常处理代码。
3 结束语
ADO技术具有易于使用、访问灵活、对磁盘和存储容量要求小、应用范围广等特点,其优越性已经在笔者用Visual C++6.0开发的电力系统接线图动态配置软件中得到了很好的体现。了解和掌握ADO技术具有深远的意义。
分享到:
相关推荐
在Visual C++中使用ADO(ActiveX Data Objects)进行数据库编程是一种常见的技术,尤其是在需要与各种数据源交互的Windows应用程序开发中。ADO提供了一个统一的数据访问接口,使得开发者能够使用一致的方式访问不同...
面向对象编程是现代软件开发中的核心概念,Visual C++作为微软提供的强大开发工具,尤其适合于Windows平台下的应用开发,MFC则是其支持面向对象编程的重要库。 面向对象编程(Object-Oriented Programming, OOP)的...
在实际编程中,开发者可能还会遇到与特定数据库相关的配置问题,如设置ODBC数据源,或使用ADO.NET的.NET Framework版本进行跨平台开发。尽管文件列表中没有明确的“中”和“下”部分文件,但这些知识点通常是学习ADO...
我从网上找到的,我做成了CHM文档,供大家阅读方便。 数据库技术初步 ODBC基本概念 ADO对象访问模型 ... ADO与ODBC的区别 ... MFC中相关类和ADO类库简介 ... 在Visual C++中用ADO进行数据库编程3
Visual C++ 开发技术 ADO数据库编程 数据库中导入电子表格例程,例程来自《Visual C++ 开发技术大全》,全部打包下载可点击http://download.csdn.net/detail/zhou625315237/5103878
在C++数据库编程中,通常会涉及到以下几个核心知识点: 1. 数据库API:Visual C++支持多种数据库API,如ODBC(Open Database Connectivity)和OLE DB。ODBC是更通用的标准,可以访问多种类型的数据库,而OLE DB则更...
在ADO编程中,最重要的三个对象是`Connection`、`Command`和`Recordset`: - **Connection**:负责与数据库服务器建立连接。 - **Command**:用于执行SQL语句或其他数据库命令。 - **Recordset**:存储查询结果或...
Visual C++ ADO数据库编程入门中涉及到的知识点非常丰富,这里对这些知识点进行详细阐述。 首先,ADO(ActiveX Data Objects)是Microsoft公司推出的一种编程接口,用于访问数据库,它建立在OLEDB(Object Linking ...
《Visual C++ MFC编程实例》是一本专为初学者设计的教程,旨在帮助读者深入理解和掌握Microsoft Foundation Classes (MFC)库在Visual C++环境中的应用。MFC是Microsoft提供的一套C++类库,它封装了Windows API,使得...
在《Visual C++数据库实用编程100例》这本书中,作者深入浅出地探讨了如何利用Microsoft的Visual C++ 6.0这一强大的开发工具,结合数据库技术进行应用程序的开发。书中通过精选的100个实例,覆盖了数据库编程的多个...
《Visual C++高级编程》是针对使用...在《Visual C++ 6.0编程高手》的学习过程中,你会逐步掌握这些高级技术,并通过实践项目深化理解和应用能力。不断探索和实践,将使你成为一名出色的Visual C++高级开发者。
6. **数据库编程**:Visual C++ 2005支持ODBC和ADO.NET,使得数据库访问变得容易。书中将介绍如何连接到数据库、执行SQL语句、处理结果集,并创建数据驱动的应用程序。 7. **网络编程**:通过Winsock库,开发者可以...
10.ADO数据库操作演示(Visual C++编程 源代码)10.ADO数据库操作演示(Visual C++编程 源代码)10.ADO数据库操作演示(Visual C++编程 源代码)10.ADO数据库操作演示(Visual C++编程 源代码)10.ADO数据库操作演示...
《Visual C++.NET应用编程150例》这个压缩包文件包含了丰富的Visual C++.NET编程实践案例,旨在帮助开发者深入理解和掌握C++.NET在实际开发中的应用。Visual C++.NET是微软开发的一种集成开发环境(IDE),它集成了...
《Visual C++.NET应用编程150例》是一本深入浅出的教程,旨在帮助开发者掌握使用Visual C++.NET进行应用程序开发的技能。教程通过丰富的实例,覆盖了.NET框架下的各种核心概念和技术,旨在提升读者的实践能力。下面...
- 介绍如何在Visual C++中配置和使用数据库连接,例如使用ODBC、OLE DB或者直接通过ADO等技术进行数据库连接。 2. SQL语言应用 - 解释SQL语言的运用,如何在Visual C++中通过嵌入SQL语句或者使用数据库API来进行...