Visual C++中的活动数据对象

《Visual C++开发实战1200例》配套光盘资源解析与高效使用指南 在Windows桌面应用开发领域,Visual C++与MFC框架是构建图形用户界面和系统级程序的核心技术。其原理基于Windows API和消息驱动机制,通过封装提供高效的开发体验。掌握其技术价值在于能够深入操作系统底层,开发高性能、高稳定性的原生应用。在数据库连接、多线程管理、网络通信等复杂应用场景中,Visual C++展现出强大的控制力。本文聚焦于经典学习资源《Visual C++开发实战1200例》的配套光盘,针对开发者在利用此类**配套资源**时常遇到的**工程配置**与编译问题,提供从环境准备 阅读详情

文章来源:http://www.yesky.com/SoftChannel/72342371928702976/20040128/1763931.shtml


 摘 要: 本文简要介绍了微软的活动数据对象(ADO)模型,结合实例阐述了在Visual C++环境下使用ADO操纵数据库的基本步骤,分析ADO的特点及与开放式数据库连接(ODBC)的差异与应用前景。

  关键词: 活动数据对象 数据库 Visual C++

  1 ADO是微软整个COM战略体系中的一个组成部分

  活动数据对象(ADO)是一组由微软提供的COM组件。 ADO建立在微软所提倡的COM体系结构之上,它的所有接口都是自动化接口,因此在C++、VisualBasic、Delphi等支持COM的开发语言中通过接口都可以访问到ADO。ADO通过使用OLE DB这一新技术实现了以相同方式可以访问关系数据库、文本文件、非关系数据库、索引服务器和活跃目录服务等的数据,扩大了应用程序中可使用的数据源范围,从而成为微软整个COM战略体系中访问数据源组件的首选,是ODBC的替代产品。


图:ADO对象模型

  2 ADO对象模型组成

  与微软的其它数据访问模型DAO和RDO相比,ADO对象模型非常精炼,仅由三个主要对象Connection、Command、Recordset和几个辅助对象组成,其相互关系如图所示。Connection对象提供OLE DB数据源和对话对象之间的关联,它通过用户名称和口令来处理用户身份的鉴别,并提供事务处理的支持;它还提供执行方法,从而简化数据源的连接和数据检索的进程。Command对象封装了数据源可以解释的命令,该命令可以是SQL命令、存储过程或底层数据源可以理解的任何内容。Record set用于表示从数据源中返回的表格数据,它封装了记录集合的导航、记录更新、记录删除和新记录的添加等方法,还提供了批量更新记录的能力。其它辅助对象则分别提供封装ADO错误、封装命令参数和封装记录集合的列。 

  3 ADO的特点分析

  (1)由于封装了许多底层工作,使用ADO与使用ODBC几乎是一样方便。

  (2) ADO不仅具有ODBC的主要功能,而且ADO适用的数据源的范围要大的多。

  (3)在定义ADO记录集变量和数据库表字段绑定类时,要求记录集的字段变量、状态变量与数据库表字段的个数、顺序必须相同。这一点比在FMC中使用ODBC要复杂一些。但在数据库字段与ADO记录集字段变量绑定的宏中,ADO 提供的数据类型要远多于FMC中的RFX(如日期时间类型,在ODBC中只能转换为Cstring类型)。

  (4)ADO允许同一Connection实例下有多个Record set实例。

  (5)ADO允许进行批更新(使用的Update Batch方法),这样将大大减轻网络负担,提高数据库处理效率。

4 ADO在Visual C++中的使用

  利用微软在Micrsoft Studio 6中提供的ADO2,可以在Visual C++中使用ADO接口操纵SQL SERVER数据库。在编译型高级语言中使用ADO,比起在一些脚本语言(如Visual Basic Scropt和JavaScript)中使用ADO要困难一些。

  以下给出一个Visual C++下使用ADO的Connection对象及其Record set对象的基本步骤:

  (1) 使用import指令引入ADO2组件

  例:#import "C:\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile") 

  (2) 定义CADORecordBinding 的派生类,用于程序与数据库表字段的交互,该类的定义可参见icrsint.h。

  例:

class CIntlive : public CADORecordBinding 
{ 
public:
DBTIMESTAMP m_datetime; //定义ADO记录集字段变量(与数据库表字段相对应)
long m_key;
long m_value;
long m_quality;
WORD m_stsdatetime; //定义ADO记录集状态变量
WORD m_stskey;
WORD m_stsvalue;
WORD m_stsquality;
BEGIN_ADO_BINDING(CIntlive) //将数据库字段与ADO记录集字段变量绑定
ADO_VARIABLE_LENGTH_ENTRY2(1,adDBTimeStamp,m_datetime,sizeof(m_datetime),m_stsdatetime,true)
ADO_NUMERIC_ENTRY(2,adInteger,m_key,10,0,m_stskey,true)
ADO_NUMERIC_ENTRY(3,adInteger,m_value,10,0,m_stsvalue,true)
ADO_NUMERIC_ENTRY(4,adInteger,m_quality,10,0,m_stsquality,true)
END_ADO_BINDING()
};

  (3) 调用CoInitialize初始化COM ::CoInitialize(NULL); 

  (4) 声明ADO的Connection对象指针和Recordset对象指针并初始化。(类型名在 msado15.dll中已定义)

  例:

_ConnectionPtr pConnection1 = NULL;
_RecordsetPtr rstADO1 = NULL; 

  (5) 定义CADORecordBinding派生类的实例及其Bind接口指针。

  例:

CIntlive m_intdata; 
IADORecordBinding *rstADOBind1 = NULL; 

  (6) 产生Connection对象实例和Record set对象实例。

  例:

pConnection1.CreateInstance(_uuidof(Connection)); 
rstADO1.CreateInstance(__uuidof(Recordset)) ; 

  (7) 连接到数据库并打开Record set对象,其中open函数的参数的使用方法可参见微软MSDN中ADO 相应对象参数的Basic描述。

  例:

PConnection1->Open("driver={SQL server};server=servera;uid=sa;pwd=;database=pubs","","",NULL);
rstADO1->Open("data", _variant_t((IDispatch *)pConnection1,true), 
adOpenKeyset,adLockBatchOptimistic, adCmdTable); 

  (8) 将CADORecordBinding派生类的实例联编到Record set对象的Bind接口。

  例:

RstADOBind1->BindToRecordset(&m_intdata); 

  (9) 对Record set对象实例进行操作。操作方法可参见微软MSDN中ADO Record set对象相应方法的Basic描述。

   例:

rstADO1->Move Next(); //移动游标到下一条记录
rstADO1->Update(_variant_t("quality"),_variant_t("3"))); //修改记录的quality字段的值为3
rstADO1->Update Batch(adAffectAll)); //将在Record set对象上的所有更新一次送入数据库

  (10) 关闭Record set对象并释放Bind接口。

  例:

RstADO1->Close(); 
RstADOBind2->Release(); 

  (11) 关闭连接 pConnection1->Close(); 

  (12) 调用CoUnitialize释放COM资源 ::CoUninitialize(); 

   5 结论

  作为ODBC的替代产品,ADO确实有其过人之处。由于ADO数据源几乎覆盖了目前常见的数据源类型,对于ODBC所不支持的数据源,ADO无疑是唯一的选择。而ADO的批更新功能,更是网络环境下大数据量更新应用的重要因素。由于ADO缺乏大量的第三方厂商的支持,使得ADO目前远不如ODBC普及,但其面向对象的特性将使ADO具有比较广阔的发展前景。


C++中ADO编程的实践与资源 本文从《用Visual C++ 6在21天内自学数据库编程》一书中的章节内容出发,详细介绍了在C++中使用ActiveX数据对象(ADO)进行数据库编程的方法。同时,文章还列举了相关的资源和工具,如OLE DB SDK和Microsoft网站,为数据库编程提供了丰富的学习资源和实践指导。 阅读详情

相关推荐

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 470

简析Visual C++中的活动数据对象

简析Visual C++中的活动数据对象程序运行效果截图:摘 要: 本文简要介绍了微软的活动数据对象(ADO)模型,结合实例阐述了在Visual C++环境下使用ADO操纵数据库的基本步骤,分析ADO的特点及与开放式数据库连接(ODBC)的差异与应用前景。 左图:ADO对象模型   关键词: 活动数据对象 数据库 Visual C++   1 ADO

小发猫 1417

PyCharm中Pyvips配置避坑指南:为什么pip安装后import还是报错?

本文详细解析了在PyCharm中配置Pyvips时,即使pip安装成功,import仍报错的根本原因。核心在于Pyvips依赖的libvips原生库未正确配置环境变量。文章提供了从下载libvips、配置Windows系统PATH到PyCharm项目级设置的完整避坑指南,并对比了三种配置策略,帮助开发者彻底解决DLL加载失败问题。

bush的博客 209

VC++程序员应当如何阅读ADO文档

VC++程序员应当如何阅读ADO文档VC++程序员应当如何阅读ADO文档《ADO API参考》用VB的语法描述了ADO API的内容。但ADO程序员却使用着不同的编程语言,比如VB,VC++,VJ++。对此《ADO for VC++的语法索引》提供了符合VC++语法规范的详细描述,包括功能、参数、异常处理等等。ADO 基于若干的COM借口实现,因此它的使用对于一个正进行C

灰虫轨迹 1195

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3245

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 330

ado使用方法

一、直接使用控件: 就是普通的OCX控件操作,简单的要命。首先选中菜单Project->Add To Project->Components And Control…,在对话框中选中Registered ActiveX Controls目录下的Microsoft ADO Data Control 6.0 (SP4) (OLEDB)然后点击Insert,把ADO控件的类文件导入到当前工程之中。此时

thisispan 3558

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 308

ADO学习(四)ADO扩展IADORecordBinding

当我们使用Visual C++进行ADO编程时,一项颇为头疼的工作就是对VARIANT字段类型的处理。通常做法是,先把VARIANT类型转换为形式上较为类似的C++类型,然后再把转换后的数据存放在一个类(class)或结构(structure)中。即便如此,对VARIANT数据类型的处理在一定程度上也影响到了程序的性能。   ADO为我们提供了一个接口,该接口使我们可以把数据直接读取到本地,

liujiayu2的专栏 1644

Langchain分割方式

【代码】Langchain分割方式。

2897

WEBGL Shader零基础教程(四):片元着色器核心逻辑

本文系统介绍了WebGL渲染管线中片元着色器的核心概念与应用。主要内容包括:1)片元着色器在渲染管线中的定位与作用,作为逐像素处理单元接收插值数据并计算最终颜色;2)输入数据类型与使用规则,重点讲解varying变量和uniform变量的应用场景;3)颜色计算的核心逻辑,涵盖基础色、渐变、纹理采样和颜色混合;4)进阶特效实现与性能优化技巧,包括交互效果、内置函数组合和GPU计算优化;5)通过综合案例演示了纹理、波纹与交互效果的整合实现。文章提供了完整的代码示例和调试建议,为后续学习光照模型、后期处理等高级渲

分享知识,拥抱变化 1374

Visual C++中的活动数据对象(ado)

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.as

xisacihong的专栏 1341

【视频】GStreamer+WebRTC(九):使用NVIDIA硬编解码

2)下载 GStreamer-bad 插件包源码注意要下载和 GStreamer版本对应的插件包3)下载NVIDIA硬编解码SDK最新的SDK下载地址注意 GStreamer 1.24.2 中调用的 NVIDIA Video_Codec_SDK 不是最新的,先使用下面的方法,查看gst-plugins-bad-1.24.2.tar.xz 对应的NVIDIA Video_Codec_SDK 的版本是多少。

郭老二 263

Visual C++中的活动数据对象(ado) zhuan

 程序运行效果截图:摘 要: 本文简要介绍了微软的活动数据对象(ADO)模型,结合实例阐述了在Visual C++环境下使用ADO操纵数据库的基本步骤,分析ADO的特点及与开放式数据库连接(ODBC)的差异与应用前景。 左图:ADO对象模型   关键词: 活动数据对象 数据库 Visual C++   1 ADO是微软整个COM战略体系中的一个组成部分   活动数据对象(ADO)是一组由微软提供的

wangyh专栏 2082

Statistics and Machine Learning Toolbox

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mfc连接access数据库

ADO(Active Data Object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,

chaoguodong的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC 数据库编程 ADO

1 ADO是微软整个COM战略体系中的一个组成部分   活动数据对象(ADO)是一组由微软提供的COM组件。 ADO建立在微软所提倡的COM体系结构之上,它的所有接口都是自动化接口,因此在C++、VisualBasic、Delphi等支持COM的开发语言中通过接口都可以访问到ADO。ADO通过使用OLE DB这一新技术实现了以相同方式可以访问关系数据库、文本文件、非关系数据库、索引服务器和活

小_鱼的专栏 657

c++ mysql sql 语句的编写_详述Visual C++语言编写数据库

目前,在Web开发上,Visual C++语言没有多大的市场。在企业级的应用上,以Java、.NET(C#是其中重要的一员)居多,C++仍然占有一席之地,在这里拿出来和大家分享一下,希望本文能教会你更多东西。一个基于odbc的应用程序对数据库的操作不依赖任何dbms,不直接与dbms打交道,所有的数据库操作由对应的dbms的odbc驱动程序完成。也就是说,不论是foxpro、access还是ora...

weixin_39638708的博客 349

Lotus C++ API

Lotus C++ API   3 Lotus C++ API3.1 简介    C++ API是建立在C API的基础上的又一个工具包,两者也比较相似:     可以操纵Domino/Notes中的绝大部分数据对象: 数据库:创建、拷贝、复制、删除、修改ACL 文档:创建、拷贝、删除 域:创建、修改、拷贝、删除,对RTF域具有强大的处理功能 视图和文件夹的使用 可以创建验证者,并能用验证

748

Visual C++数据库编程(ODBC)

ODBC基本概念   ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可

MyDearest 891

Visual C++ 6.0的文档/视结构

Visual C++ 6.0 以其功能强大、用户界面友好而倍受程序员们的青睐。但是,在当前的Microsoft 基本类库4.2 版本中,大约有将近200 个类,数千个函数,加之Microsoft 公司隐藏了一些技术细节,使得人们深入学习MFC变得十分困难。   MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用、单文档应用(SDI)和多文档应用(MDI)。前两者的结构较简单,本

aocanghai的专栏 2094

]Visual C++ ODBC数据库编程入门 (2015-06-13 18:06:31)

Visual C++数据库编程       ODBC基本概念   ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分

sunnyli3166的专栏 1364

Visual Basic数据库开发中的三大工具

子窗口只能在父窗口内活动,如果子窗口最小化,他将显示在父窗口的底部。数据控件可以通过一些属性的设置去链接某个数据库文件,但是它本身并无法显示数据库各个记录的内容,必须在搭配其他具有数据感知(中新增的对象,它是一个更简单的对象模型,它更好的集成了其它数据访问技术,并且使本地和远程数据库均有共同的界面,可以取代。))等功能强大的工具,协助设计人员轻松的连接数据库文件,并访问其中的数据,在功能方面与其他一些专业数据库软件(如。和其他的窗体一样,用户能够移动子窗体和改变子窗体的大小,但是他们被限制在。

qq_61141142的博客 518

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

   odbc(open database connectivity,开放数据库互连)是微软公司开放服务结构(wosa,windows open services architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准api(应用程序编程接口)。这些api利用sql来完成其大部分任务。odbc本身也提供了对sql语言的支持,用户可以直接将sql语

6030
上一篇: ODBC基本概念
下一篇: c++ hash_map 详细介绍
程序员悟空
博客等级 码龄18年 65粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值