在VC中使用ADO开发数据库应用程序

MFC对Access数据库操作实例 该源码实现了MFC对Access数据库的简单操作,包括数据库的创建,数据表的创建,已经数据的增删改查等功能的实现;有一定的参考价值,故这里上传,以供后来查阅 立即下载

在VC中使用ADO开发数据库应用程序

一、ADO概述

ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。

OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。

二、在VC中使用ADO

1、引入ADO库文件

使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:

代码1:用#import引入ADO库文件

#import "c:filesfiles.dll"

no_namespaces rename("EOF" adoEOF")

这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。

2、初始化OLE/COM库环境

必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。

 

代码2:初始化OLE/COM库环境

BOOL CADOApp::InitInstance()

{

if(!AfxOleInit())

 

{

AfxMessageBox(“OLE初始化出错!”);

return FALSE;

}

……

 

}

函数AfxOleInit在每次应用程序启动时初始化OLE/COM库环境。

同DAO和CDatabase一样,ADO由几个接口组成:

_ConnectionPtr,_CommandPtr和_RecordsetPtr.

不同于DAO和Cdatabase的是,ADO基于COM的接口,因此,假如你没有接触过COM,你应该在使用ADO前先找有关书籍了解一下COM。

3、ADO接口简介

ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。

_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。

_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。

_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。

 

4、使用_ConnectionPtr接口

_ConnectionPtr是一个连接接口,它类似于CDatabase和CDaoDatabase。它们的工作原理相似。首先创建一个_ConnectionPtr接口实例,接着指向并打开一个ODBC数据源或OLE DB数据提供者(Provider)。以下代码和CDaoDatabase分别创建一个基于DSN和非DSN的数据连接。

 

代码3:使用CDaoDatabase(基于DSN)

CDaoDatabase MyDb = new CDaoDatabase();

MyDb.Open(NULL,FALSE,FALSE,"ODBC;DSN=samp;UID=admin;PWD=admin");

 

 

代码4:使用CDaoDatabase(基于非DSN)

CDaoDatabase MyDb = new CDaoDatabase();

MyDb.Open(NULL,FALSE,FALSE,"ODBC;DRIVER={SQL Server};SERVER=server;

DATABASE=samp;UID=admin;PWD=admin");

 

 

代码5:使用_ConnectionPtr(基于DSN)

_ConnectionPtr MyDb;

MyDb.CreateInstance(__uuidof(Connection));

MyDb->Open("DSN=samp;UID=admin;PWD=admin","","",-1);

 

 

代码6:使用_ConnectionPtr (基于非DSN)

_ConnectionPtr MyDb;

MyDb.CreateInstance(__uuidof(Connection));

MyDb->Open("Provider=SQLOLEDB;SERVER=server;DATABASE=samp;UID=admin;

PWD=admin","","",-1);

 

5、使用_RecordsetPtr接口

_RecordsetPtr接口的使用方法和CDaoDatabase类似,通过以下代码的比较,你会发现使用_RecordsetPtr接口非常简单(以下代码使用上面已经创建的数据连接):

 

代码7:使用CDaoDatabase执行SQL语句

CDaoRecordset MySet = new CDaoRecordset(MyDb);

MySet->Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM t_samp");

Now using ADO:

 

 

代码8:使用_RecordsetPtr执行SQL语句

_RecordsetPtr MySet;

MySet.CreateInstance(__uuidof(Recordset));

MySet->Open("SELECT * FROM some_table",

MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。从以下代码可以看到,使用ADO的_RecordsetPtr接口,就不需要象DAO那样频繁地使用大而复杂的数据结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。假定程序有一个名称为m_List的的ListBox控件,下面代码我们用_RecordsetPtr接口获取记录集数据并填充这个ListBox控件:

 

代码9:使用DAO访问数据

VARIANT * vFieldValue;

COleVariant covFieldValue;

CString Holder;

while(!MySet->IsEOF())

{

MySet->GetFieldValue("FIELD_1", covFieldValue);

vFieldValue = (LPVARIANT)covFieldValue;

if(vFieldValue->vt!-VT_NULL)

{

Holder.Format("%s",vFieldValue->pbVal);

m_List.AddString(Holder);

 

}

MySet.MoveNext();

 

}

 

代码10:使用ADO访问数据

_variant_t Holder

try{

while(!MySet->adoEOF)

{

Holder = MySet->GetCollect("FIELD_1");

if(Holder.vt!=VT_NULL)

m_List.AddString((char*)_bstr_t(Holder));

MySet->MoveNext();

}

}

catch(_com_error * e)

 

{

CString Error = e->ErrorMessage();

AfxMessageBox(e->ErrorMessage());

}

catch(...)

{

MessageBox("ADO发生错误!");

}

必须始终在代码中用try和catch来捕获ADO错误,否则ADO错误会使你的应用程序崩溃。当ADO发生运行时错误时(如数据库不存在),OLE DB数据提供者将自动创建一个_com_error对象,并将有关错误信息填充到这个对象的成员变量.

 

6、使用_CommandPtr接口

_CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用_CommandPtr接口的方法:

 

代码11:使用_CommandPtr接口获取数据

_CommandPtr pCommand;

_RecordsetPtr MySet;

pCommand.CreateInstance(__uuidof(Command));

pCommand->ActiveConnection=MyDb;

pCommand->CommandText="select * from some_table";

pCommand->CommandType=adCmdText;

pCommand->Parameters->Refresh();

MySet=pCommand->Execute(NULL,NULL,adCmdUnknown);

_variant_t TheValue = MySet->GetCollect("FIELD_1");

CString sValue=(char*)_bstr_t(TheValue);

7、关于数据类型转换

由于COM对象是跨平台的,它使用了一种通用的方法来处理各种类型的数据,因此CString 类和COM对象是不兼容的,我们需要一组API来转换COM对象和C++类型的数据。_vatiant_t和_bstr_t就是这样两种对象。它们提供了通用的方法转换COM对象和C++类型的数据。

8、小结

数据访问发展的趋势是OLE DB.使用OLE DB最简单的方法是ADO.ADO的对象层次模型封装了数据库访问细节,为C++程序员提供了一种非常好的数据访问策略。

第一个VC++ 6.0的ADO编程示例(非ADO控件编程!) 环境:Windows XP SP3、VC++ 6.0、Windows 2003 Server SDK、MS SQL Server 2000 使用步骤: 1、下载解压之后,先运行工程目录中的上课教学For SQL Server.sql脚本,在数据库中创建所需要的表 2、注意:如果你的Windows系统安装的目录不在C盘,那么需要使用IDE打开StdAfx.h中的#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")语句,然后修改成你机器器中的位置 3、修改CFirstADOApp类中的InitInstance方法中的m_pConnection->Open("Driver=SQL Server;Database=bbs;Server=127.0.0.1;UID=sa;PWD=sa;","","",adModeUnknown);根据你机器上的数据库位置、数据库的用户名、密码来修改 4、然后点击“!”按钮运行程序,如果一切正常,那么可以看对话框中显示数据库表description的信息 5、修改CFirstADODlg类的OnInitDialog方法中的_variant_t sql("select * from HouseInformation where contactor = '建翔桥'");语句,可以得到不同的查询结果 阅读对象:希望学习VC++的ADO编程,而不是ADO控件的编程的人员。。。。^_^ 注:本示例注释非常详细,是学习代码编程ADO程序的好例子! 立即下载

相关推荐

自学VC++2010实例【001】;用ADO方法在ACCESS2010数据库中加入新记录

级别:入门级。 在VC++2010用ADO方法在ACCESS2010数据库中加入新记录。【要在机器中安装Microsoft.ACE.OLEDB.12.0引擎,网上有下载的】。 本实例参照清华大学出版社的《Visual C++范例开发大全》,ISBN: 978-7-302-22624-6,作者: 陈国建. 等编著,版次: 2010年7月第1版。 本实例参照如下的章节改编出来的: 11.1 数据库操作访问技术实例 402 实例253 使用DAO建立Access数据库文件 402 实例254 使用ADOX建立Access数据库文件 404 实例255 使用ADO添加数据库记录 407 实例256 使用ADO查询数据库记录 409 实例257 使用ADO删除和修改数据库记录 413 本人初学VC++,水平有限,请指教。邮箱:501448@qq.com

vc++使用ADO编程

ADO实际上就是由一组Automation对象构成的组件,因此可以象使用其它任何Automation对象一样使用ADO。ADO中最重要的对象有三个:Connection、Command和Recordset,它们分别表示连接对象、命令对象和记录集对象。如果您熟悉使用MFC中的ODBC类(CDatabase、CRecordset)编程,那么学习ADO编程就十分容易了。  使用ADO编程时可以采

王孙贵族的专栏 780

如何用Deep OC-SORT提升多目标跟踪精度?实战配置与性能优化指南

本文是一份针对开发者的Deep OC-SORT多目标跟踪实战指南。详细解析了如何通过部署其核心的“动态外观记忆”与“相机防抖”模块来有效应对遮挡与抖动,从而显著提升跟踪精度与连续性。内容涵盖从环境搭建、参数调优到性能压榨的全流程,并提供针对不同场景的配置建议与工程落地技巧。

f9g0h的博客 670

CDaoDatabase操作access数据库

由于 CDaoDatabase对一些高版本的编译环境会发生4995警告,可以去除这种警告#pragma warning(disable : 4995)CDaoDatabase daoDataBase; daoDataBase.Open(_T("UploadInfor.mdb")); CDaoRecordset daoRecordset(&daoDataBase); daoRecordset

一个爱编程的人专栏 2775

Pspice开关电源仿真:从零实现反激式电源设计实战案例

通过Pspice仿真工具,手把手实现反激式开关电源的设计与优化,深入剖析关键参数设置与波形分析,帮助掌握Pspice在电源开发中的实际应用技巧。

weixin_35756690的博客 1156

时序定江山,功耗写风骨——解读时序库lib文件的奥义【芯片设计 lib文件】

lib库,全称liberty library format file:它是Liberty时序文件的简称,使用 Liberty 语法来编写。它可以通过library compiler/dc转换成.db文件(database),供synopsis家的DC和PT使用,也可以通过spyglass的library compiler来生成sglib文件,供spyglass使用。他们是等价的,但db文件是二进制格式,人类不可读。

LogicYarn的博客 2602

关于CDaoDataBase的总结

CDaoDatabase不能使用于多线程。 ① 在主对话框中建立CDaoDatabase对象,然后把该对象传入到扫描线程中。 这样做的结果是,凡是涉及到数据库操作的语句,如创建,查询等,在运行时都会出错。很明显,这是因为CDaoDatabase对象跨越了主对话框线程和扫描工作线程。 ② 在线程中建立CDaoDatabase对象,一切的数据库操作都在单个独立的线程中完成。 这样做的结果是在线

悦途的专栏 1403

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 726

ADO编程详解(C++)

一、概述 ADO即Microsoft ActiveXData Object,是Microsoft继ODBC之后,基于OLE DB技术的一种数据库操作技术,使您能够编写通过OLE DB提供者对在数据库服务器中的数据进行访问和操作的应用程序。ADO同OLE DB、数据库之间的关系可以用下图来表示: 其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO支持用于建立基于客户...

羞羞滴小朋友 1万+

【数字图像处理第四版课后习题答案】第2章 数字图像基础(含英文原版)

如图 P2.3 所示,视网膜图像中与点相对应的直径 x 是由类似的三角形得到的。即得出 x = 0.085d。根据第 2.1 节中的讨论,并结合一些自由解释,我们可以将眼窝视为一个方形传感器阵列,拥有大约 337,000 个元素,这相当于一个大约 580×580 个元素的阵列。假设元素间距相等,则在 1.5 毫米长的直线上有 580 个元素和 579 个空间,共计 1,159 个。换句话说,如果一个点的直径 d<1.3×10-6 m,或者 d<15.3×10 m,眼睛就无法检测到这个点。

weixin_56463218的博客 1万+

FOFA奇技淫巧:从搜索语法到实战场景的深度挖掘

本文深入探讨了FOFA搜索语法在网络空间测绘中的高效应用,从基础语法到实战场景的深度挖掘。通过渗透测试、威胁狩猎、资产发现等实际案例,展示了如何利用FOFA精准定位目标系统、识别蜜罐、追踪威胁,并提供了合规使用指南和性能优化技巧,助力安全工作者提升效率。

weixin_32428571的博客 237

VC++ ADO开发实践之五

一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的

zswzwy的专栏 1806

Python实现商品价格监控与波动分析爬虫项目

本文通过完整的代码示例和详细的技术讲解,展示了如何实现商品价格的自动监控和波动分析。该项目不仅适用于个人购物助手,还可以扩展为商家的竞品监控工具。通过结合数据抓取、存储、分析与可视化,能够帮助我们更好地理解市场趋势并做出优化决策。

2201_76125261的博客 1743

在VC6.0中使用ADO开发数据库应用程序

 在VC6.0中使用ADO开发数据库应用程序  使用ADO开发应用程序有两种方法,一种是直接在应用程序中使用ADO数据控件,该方法最简单,无需编写一行代码即可实现对数据库的访问,另一种方法是直接使用ADO对象实现对数据库的操作,该方法较复杂,但可以让程序员更深入的控制数据库。     一.使用ActiveX控件建立应用程序     该方法需要两个ActiveX控件:Microsoft   AD

嵌入式Linux应用与开发 1546

点云从入门到精通技术详解100篇-基于 CBCT 与口内扫描数据的牙齿点云配准

口扫生成的三维牙模型只包含牙冠结构,容易受到唾液、食物残留等杂质的干扰。像精度,但其扫描成本较高,在公立医院的普及率较低。此外,口扫探入式的体。完整、精确的牙齿信息,有助于医生更好地进行数字化辅助诊疗,提高手术的预。可以表示上颌骨、下颌骨、牙冠以及牙根的位置和形状,但其扫描分辨率较低,精配准前实现粗略的预配准来确定点云间的初始位置,为精配准提供良好的配准。该算法通过计算点对间的距离确定源点云中的某一点在目标点云中的对应。算两点之间的欧氏距离,运算量较大,而且由于算法只考虑点集间的距离而忽略。

getusushu的博客 1640

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何在VC中使用ADO开发数据库应用程序

一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口

Johnny的专栏 940

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC使用ADO编程

在VC中使用ADO开发数据库应用程序 一、ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少

whatday的专栏 943

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Microsoft ADO(ActiveX Data Object)用法浅析

一、ADO简介          ADO(ActiveX   Data   Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE   DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE   DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC   API、DAO、RDO都要容易使用,并不失灵活性。本文将详细地介绍在VC下如何使用

梦之队2014---http://blog.youkuaiyun.com/hlb0924 1665
上一篇: 在Visual C++中用ADO进行数据库编程(上)
下一篇: 索引和索引调整向导
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值