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编程

时间: 2024-10-15 12:57:05

Visual C++中的ADO编程的相关文章

Visual C++中的一些编程小技巧

在应用程序的任意地方实现窗体的最大化.最小化.正常窗口等功能 // 设置Windows窗体的状态 void CMinWindowsDlg::SetWindowState(int nWindowSize) { WINDOWPLACEMENT lwndpl, *plwndpl = NULL; plwndpl = &lwndpl; GetWindowPlacement(plwndpl); plwndpl->showCmd = nWindowSize; SetWindowPlacement(plwn

Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源

熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件. 但是这个模型向导默认只显示微软自己的SQL Server数据源,如果想使用Mysql数据源,得做一些配置. 自己得解决方案如下: 1,导入Entity Framework 6.1.3. 这个是出现ADO.NET实体数据模型选项的前提.如果没有Entity Framework包,新建项菜单中没有ADO.NET实体数据模型选项. 6

visual studio C/C++ 编程学习 visual studio 中的生成事件

也许是太方便了,大家在visualstudio中调试代码时,大多习惯了直接点这个小绿箭头,但其实从点这个小绿箭头直到程序开始运行中间经历了多个步骤. 下面我就这段事件在编译过程中遇到的问题,讲一些我的经验. 今天先来说一说 visual studio 中的生成事件 一个事例:有几幅bmp图像数据文件放在 test .vcproj工程文件所在文件夹下面的Data文件夹中.此时,外界调用该工程所生成的DLL文件,且需要取Data文件夹中bmp图像数据文件. 如下图所示: 作为首启动项的CallTes

Visual Studio 中的 .NET Framework 类库

Visual Studio 中的 .NET Framework 类库 .NET Framework 类库由命名空间组成.每个命名空间都包含可在程序中使用的类型:类.结构.枚举.委托和接口. 当您在 Visual Studio 中创建 Visual Basic 或 Visual C# 项目时,已经引用了最常用的基类 DLL(程序集).但是,如果您需要使用尚未引用的 DLL 中的类型,则需向此 DLL 添加引用.有关更多信息,请参见添加和移除引用. 以下主题提供了下列信息: 每个功能区域的最重要命名

在Visual Studio中开发Matlab mex文件,生成mexw64/mexw32

csunking贡献,2015-9-22 1712 1.   概述 通过使用C/C++与Matlab混合编程,既可以享受到C代码快速执行的速度,又可以方便的使用Matlab众多的库函数和强大的绘图功能.让Matlab调用C函数是通过DLL文件实现的,而这个DLL的开发过程不仅仅可以使用Matlab自带的mex命令,还可以使用VC++开发环境,使用VC有很多好处,一是让我回到了原来熟悉的开发环境中,二能够使用更加标准的C++编译器,第三点也是最爽的,可以使用VC强大的调试功能. 此次文档更新时使用

visual c++ 2013进行MySQL编程(ODBC) -- (一) 套装安装

最近写了有些技术类文章了,只因为最近研究多了些东西,有一些项目用到了,所以自己记录一下,怕自己忘记,如果有哪位同学有自己的见解,可以邮件或者回复,技术类的探讨,不管对否,都是欢迎的. 操作之前,必须安装有Visual Studio 2013,其他的平台,我没有研究,我用的操作系统是Windows 8 Ultimate 64bit. 回到正题,vc数据库编程操作数据库Mysql,使用ODBC驱动接口. 而不是使用Mysql自带的C或者C++接口. 安装数据库,可以下面这个网址这里下载一个大的安装包

Visual Studio 2010缺失ADO.NET 实体数据模型解决方法

解决方法如下:1).到 Visual Studio 2010 的安装包的目录:/WCU/EFTools 中寻找如下文件 ADONETEntityFrameworkTools_chs.msi;ADONETEntityFrameworkTools_chs.cab,将它 们复制自己计算机的某一目录下,例如:X:/EF2).在这个目录下创建文本文件Log.txt(下面命令里要使用到)3).运 行:Visual Studio 命令提示(2010)工具, 访问位置:开始菜单=>Microsoft Visua

在Visual Studio中入门F#

写在前面的话 个人由某方面的兴趣需要学习 F#,网络上有关F#的中文资料很少,微软官方有很不错的文档,但是很可惜的是绝大部分的章节都是英文的.个人是一位.NET爱好者,想自己将 F# 的官方文档翻译出来,算是为了自己喜欢的 .NET 做一些贡献. 原文链接 Getting started with F# in Visual Studio 在这篇文章中 安装 F# 创建一个控制台应用程序 编写您的代码 运行您的代码 使用 F# Interactive 在 Visual Studio IDE 中支持

Visual Studio中的环境变量(以Visual Studio 2013为例)

前言 本文总结了Visual Studio中常见的环境变量及其在组织解决方案.工程中的作用. 注:本文使用的是Visual Studio 2013,由于作者主要从事C/C++开发,所以是以Visual C++的工作环境配置来描述. 什么是vs的环境变量? 先看图吧,图中以美元符号$开头 + 一对括号,这样进行引用的就是我所谓的环境变量, 图中出现的几个环境变量含义如下: 环境变量名 含义 $(SolutionDir) 解决方案目录:即.sln文件所在路径 $(Configuration) 当前的