`
chinamming
  • 浏览: 151195 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Visual C++中的ADO编程

 
阅读更多

摘 要:本文介绍了微软推出的以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进行数据库编程

    在Visual C++中使用ADO(ActiveX Data Objects)进行数据库编程是一种常见的技术,尤其是在需要与各种数据源交互的Windows应用程序开发中。ADO提供了一个统一的数据访问接口,使得开发者能够使用一致的方式访问不同...

    Visual C++ 面向对象编程教程——王育坚

    面向对象编程是现代软件开发中的核心概念,Visual C++作为微软提供的强大开发工具,尤其适合于Windows平台下的应用开发,MFC则是其支持面向对象编程的重要库。 面向对象编程(Object-Oriented Programming, OOP)的...

    Visual C++中用ADO进行数据库编程(上中下).rar_C++ builder ADO

    在实际编程中,开发者可能还会遇到与特定数据库相关的配置问题,如设置ODBC数据源,或使用ADO.NET的.NET Framework版本进行跨平台开发。尽管文件列表中没有明确的“中”和“下”部分文件,但这些知识点通常是学习ADO...

    Visual C++数据库编程快速入门

    我从网上找到的,我做成了CHM文档,供大家阅读方便。 数据库技术初步 ODBC基本概念 ADO对象访问模型 ... ADO与ODBC的区别 ... MFC中相关类和ADO类库简介 ... 在Visual C++中用ADO进行数据库编程3

    Visual C++ 开发技术 ADO数据库编程 数据库中导入电子表格例程

    Visual C++ 开发技术 ADO数据库编程 数据库中导入电子表格例程,例程来自《Visual C++ 开发技术大全》,全部打包下载可点击http://download.csdn.net/detail/zhou625315237/5103878

    Visual C++数据库实用编程100例.((铁道出版.崔莹)(配书源码)

    在C++数据库编程中,通常会涉及到以下几个核心知识点: 1. 数据库API:Visual C++支持多种数据库API,如ODBC(Open Database Connectivity)和OLE DB。ODBC是更通用的标准,可以访问多种类型的数据库,而OLE DB则更...

    Visual C++ ADO 数据库编程入门

    在ADO编程中,最重要的三个对象是`Connection`、`Command`和`Recordset`: - **Connection**:负责与数据库服务器建立连接。 - **Command**:用于执行SQL语句或其他数据库命令。 - **Recordset**:存储查询结果或...

    Visual C++ ADO数据库编程入门

    Visual C++ ADO数据库编程入门中涉及到的知识点非常丰富,这里对这些知识点进行详细阐述。 首先,ADO(ActiveX Data Objects)是Microsoft公司推出的一种编程接口,用于访问数据库,它建立在OLEDB(Object Linking ...

    VISUAL C++MFC编程实例

    《Visual C++ MFC编程实例》是一本专为初学者设计的教程,旨在帮助读者深入理解和掌握Microsoft Foundation Classes (MFC)库在Visual C++环境中的应用。MFC是Microsoft提供的一套C++类库,它封装了Windows API,使得...

    Visual C++数据库实用编程100例

    在《Visual C++数据库实用编程100例》这本书中,作者深入浅出地探讨了如何利用Microsoft的Visual C++ 6.0这一强大的开发工具,结合数据库技术进行应用程序的开发。书中通过精选的100个实例,覆盖了数据库编程的多个...

    Visual C++高级编程

    《Visual C++高级编程》是针对使用...在《Visual C++ 6.0编程高手》的学习过程中,你会逐步掌握这些高级技术,并通过实践项目深化理解和应用能力。不断探索和实践,将使你成为一名出色的Visual C++高级开发者。

    Visual C++ 2005编程技巧大全

    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++编程 源代码)10.ADO数据库操作演示...

    Visual C++.NET应用编程150例.rar

    《Visual C++.NET应用编程150例》这个压缩包文件包含了丰富的Visual C++.NET编程实践案例,旨在帮助开发者深入理解和掌握C++.NET在实际开发中的应用。Visual C++.NET是微软开发的一种集成开发环境(IDE),它集成了...

    Visual C++.NET应用编程150例

    《Visual C++.NET应用编程150例》是一本深入浅出的教程,旨在帮助开发者掌握使用Visual C++.NET进行应用程序开发的技能。教程通过丰富的实例,覆盖了.NET框架下的各种核心概念和技术,旨在提升读者的实践能力。下面...

    Visual C++数据库开发经典实例精解.pdf

    - 介绍如何在Visual C++中配置和使用数据库连接,例如使用ODBC、OLE DB或者直接通过ADO等技术进行数据库连接。 2. SQL语言应用 - 解释SQL语言的运用,如何在Visual C++中通过嵌入SQL语句或者使用数据库API来进行...

Global site tag (gtag.js) - Google Analytics