在Visual C++中使用ADO存取数据库

Visual c++ 6.0 ADO access <br />ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。<br />_ConnectionPtr接口返回一个记录集或一个空指针。<br />通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。<br />使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。<br />通常同Cdatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。<br />_Comman 阅读详情

原文地址:http://www.vczx.com/article/show.php?id=545

我们本次的话题就是——在VC中使用ADO(ActiveX Data Objects)。Visual C++提供了多种数据库处理方法,我们既可以直接从DAO SDKs(Data Access Objects Software Development Kits)或ODBC SDKs(Open Database Connectivity)中调用数据库API函数,也可以选择使用MFC(Microsoft Foundation Class Library),即使用MFC DAO和MFC ODBC类来处理数据库API。


  1、导入ADO接口

  VC编译器有这样一个特性:它可以读出COM类型库(.tlb文件),并提取其中声明的有关接口的类型库的详细资料,Microsoft的#import指令即可完成此工作。因此,为使C++程序进入ADO接口,我们用Visual Studio创建了一个空的Win32 Consol Project之后,在头文件中加入下面的一行代码:

  #import "D:Program FilesCommon Files

  SYSTEMADOmsado15.dll" no_namespace

  rename("EOF","rsEOF")

  卧龙传说提醒:该行代码应在同一行上,不能断行,这里只是版面的缘故。

  因为它指明了msado15.dll的具体位置。用户也可以在自己的Visual Studio 6的“Tools”菜单中选择“OLE/COM Object Viewer”,打开OLE/COM对象视图,通过“File|TypeLiB…”打开上面路径中的msado15.dll,查看该类型库的详细信息。

  2、创建ADO连接类

  (景玲一身淑女打扮)正确地导入类型库信息后,就可以声明一个ADO Connection对象类。该对象可以提供许多方法,在本文中我们只进行简介,仅创建了3个最有用的方法,即:Open()、Execute()和Close()。Open()方法打开一个数据库连接;Execute()方法对该数据库执行一个SQL请求并返回一组记录值;Close()方法关闭一个已打开的对象。

  class CADOConnection

  { _ConnectionPtr m_Con;

  public:

   // member functions

  CADOConnection();

  ~CADOConnection();

  bool Open(char *DSN,char *u_id,char *pass);

  bool Close(void);

  _RecordsetPtr Execute(char *sqlquery);};

  该段代码中,_ConnectionPtr定义了一个ADO对象,用变量m_Con来存储当前打开的对象的指针;而Execute()方法返回了一组记录的指针,我们用_RecordsetPtr来定义。

  3、ADO对象的实现

  (帅哥王牛向大家挥挥手)ADO依赖COM来实现。因此在我们的CADOConnection开始使用ADO对象之前,我们应该先对COM进行初始化,它可以在WinMain()中或其他程序段中实现。这里,我们把它放在类构造器中。如下:

  CADOConnection::CADOConnection()

  { // initialize COM

  CoInitialize(NULL);

  // holds current connection

  m_Con=NULL;}

  因为在对象创建的时候,没有任何数据库被打开,所以应设置m_Con为空。

  CADOConnection::Open()方法需要3个参数:被打开的DSN(ODBC Data Source Name,即ODBC数据源)、指定的用户名及口令。如果检测到一个空的DSN,Open()将创建一个连接对象的实例,如下面的代码所示:

  HRESULT hCon;

  _ConnectionPtr con = NULL;

  // ...

  hCon=con.CreateInstance(_uuidof(Connection));

  if(hCon != S_OK)

  //...

   COM组件对象有一个惟一的标识,称为CLSID。_uuidof机制利用对象的名称返回它的CLSID,而Open()通过它调用_com_ptr_t模板类中的CreateInstance()方法。COM的方法总是返回一个HRESULT,如果成功,它应该为S_OK。若ADO Connection对象创建成功,Open()就使用DSN、用户名、口令组成连接字串来打开数据库,接下来Open()再调用ADO Connection对象的Open()方法:

  HRESULT result =con-〉Open(_bstr_t(constr),"","",0);

   卧龙传说提醒:现在con是一个非空的指针了。ADO对象的第一个参数是连接字串;第二个和第三个参数分别是用户名和口令,可以为空;最后一个参数指明打开是的选项,设置为0。

  如果Open()调用成功则返回TRUE,否则返回FALSE。

   CADOConnection::Execute()主要对已经打开的数据库执行一个SQL请求,并返回一组记录值。代码实现如下:

  _RecordsetPtr CADOConnection::Execute(char *sqlquery)

  { // we should have a connection open, right ?

   if (m_Con==NULL)

   return NULL;

   _variant_t rec_affected;

   return m_Con-〉Execute(_bstr_t(sqlquery),&&rec_affected,0);}

   当检测到一个打开的数据库连接,该代码就执行Execute()方法。它的第二个参数是请求返回的一组记录数据的指针。

   CADOConnection::Close()只是简单地关闭一个打开的数据库连接。

  bool CADOConnection::Close(void)

  { if (m_Con==NULL)

  return false;

  else

  { HRESULT hr=m_Con-〉Close();

  m_Con=NULL;

  return (hr==S_OK?true:false);} }

   最后,再介绍一下CADOConnection类中重要的析构函数:

  CADOConnection:~CADOConnection()

  {// close connection, if not yet closed

  if (m_Con)

  m_Con-〉Close();

  m_Con=NULL;// VIMP !!!

  // un-initialize COM

  CoUninitialize();}

  析构函数的工作是在用户退出该连接类的时候,检查该对象是否仍处于打开状态。如果是,它首先应被关闭,即设置指向活动连接的指针变量为NULL;最终,在构造函数中被初始化的COM运行环境,将调用Win32的CoUninitialize()方法结束。

  本文的目的就是阐明如何创建VC的类,使之在使用ADO COM对象时更为方便。当然,同样的概念也适用于其他类型库中的COM对象。

Visual C++ ADO数据库编程入门  ADO 是目前在Windows环境中比较流行的客户端数据库编程技术。ADO是建立在OLE DB底层技术之上的高级编程接口,因而它兼具有强大的数据处理功能(处理各种不同类型的数据源、分布式的数据处理等等)和极其简单、易用的编程接口,因而得到了广泛的应用。而且按微软公司的意图,OLE DB和ADO将逐步取代 ODBC和DAO。现在介绍ADO各种应用的文章和书籍有很多,本文着重站在初学者的角度 阅读详情

相关推荐

基于Visual Stdio 2010的C++开发数据库基础之ADO数据库连接方法(二)

ADO数据对象用来连接数据库的方式有两种:ODBC和OLE DB方式一、ODBC连接数据源要使用ODBC DSN来访问数据库必须先建立一个数据源名,其具体步骤如下:1)“控制面板->管理工具->数据源(ODBC)”出现如下对话框:点击添加按钮,会弹出创建新数据源对话框。2)为数据源选择驱动程序:在创建新数据源对话框中根据数据库的不同选择不同的数据库驱动。例如要连接一个Acc

清月紫怡专栏 2254

Visual C++中的ADO编程

摘  要:本文介绍了微软推出的以ActiveX技术为基础的ADO数据存取技术,分析了ADO的工作原理,并用Visual C++说明了ADO数据访问技术的实现方法。 关键字:ADO;连接对象;OLE DB;数据存取;记录集   ADO(ActiveX Date Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术。ADO技术基于COM(Co

Chinamming的专栏 1105

基于Visual Stdio 2010的C++开发数据库基础之ADO(一)

一、ADO简介1、ADO概述      ADO(ActiveX Data Objects)即ActiveX数据对象,是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE_DB的一个中间层,允许开发人员编写访问数据的代码,不用关心数据库是如何实现的,只关心到数据库的链接。ADO不仅支持索引顺序访问(ISAM)数据库和基于SQL的关系数据库,还支持其他数据源,可以从不同的

清月紫怡专栏 1949

VC中使用ADO实现BLOB数据的存取

在VC中使用ADO实现BLOB数据的存取     -|walrus 发表于 2006-6-22 9:30:00

wjw806[旺旺]的专栏 1137

visual c++与sql server 2000数据库进行ADO后台链接的操作

要做上位了,今天尝试下用VC6.0在后台链接SQL 数据库,参考了《Visual C++数据库通用模块开发与系统移植》的第一章内容,下面简单说下步骤: 1.新建一个MFC基于对话框的程序,工程名为data. 2.打开SQL SERVER,新建一个data1的数据库。 3.在stdafx.h文件中最后输入:#import "c:\program files\common files\syste

十万铁骑的专栏 2025

Visual C++数据库编程:图像字段处理实践

本文还有配套的精品资源,点击获取 简介:本项目针对数据库编程中的图像字段存取问题提供了一个使用Visual C++的解决方案。通过包含的 BmpField 类,展示了如何利用MFC库和GDI+技术在数据库中处理BMP格式图像。项目也涉及到使用ADO技术连接数据库,设计数据库表结构,创建用户界面,进行内存管理,并处理可能出现的错误。开发者可以通过这个项目深入了解...

weixin_35006125的博客 1180

把图片存/取至数据库

http://blog.chinaunix.net/uid-607545-id-2088102.html http://blog.youkuaiyun.com/eryadabendan/article/details/6749939 关于图片的存储和显示 第一步:首先是要打开一个位图文件,这里使用的控件用Picture控件,就是控件图标右边最上面那个,改ID号为IDC_PICTURE,然后定义两...

weixin_30654583的博客 97

Visual Studio 2010 C++实现ListCtrl与ADO技术:读写Access数据库指南

ListCtrl是MFC(Microsoft Foundation Classes)库中一个功能强大的列表视图控件。它允许开发者展示和管理数据列表,并支持多种视图风格,例如大图标、小图标、列表和报告视图。ListCtrl控件常用于实现文件浏览器、属性表等具有层次化数据展示的应用。

weixin_36001279的博客 993

使用Visual C++ Extensions实现ADO数据绑定

前言:在使用ADO和Visual C++进行数据库程序开发时,程序员会面临一项复杂的任务,那就是对VARIANT类型字段的处理。Visual C++ Extensions for ADO提供了IADORecordBinding接口,使用该接口程序员可以绕开VARIANT而直接把数据库的数据读取到本地的C/C++类型数据中。 ADO提供了IADORecordBinding接口,使用该接口程序员可以

niushitang的专栏 1595

掌握Visual C++ 2005中ADO数据库访问技术

本文还有配套的精品资源,点击获取 简介:在关系型数据库管理系统开发中,ADO数据库访问技术是关键,特别是在使用Microsoft SQL Server 2005时。本文重点讲述如何利用Microsoft Visual C++ 2005(VC2005)通过ActiveX Data Objects(ADO)接口连接和操作SQL Server 2005数据库。介绍了从项目设置、包...

weixin_42097508的博客 913

Visual C++ 中使用ADO连接SQL Server数据库的实践指南

在当今快节奏的技术领域中,数据库的集成和数据的即时访问已成为应用程序不可或缺的特性。VC++作为一款功能强大的编程语言,与ADO(ActiveX Data Objects)技术的结合,为开发人员提供了一种高效的方式来连接并操作SQL Server数据库。这种技术组合特别适合需要精细控制数据库操作的高级场景,如复杂的事务处理和数据集同步等。

weixin_42462474的博客 904

用Visual C++开发数据库应用程序

用Visual C++开发数据库应用程序  [ 作者:ldc    转贴自:本站原创    点击数:89    更新时间:2004-4-23    文章录入:ldc311 ]  1、 概述1、1 Visual C++开发数据库技术的特点Visual C++提供了多种多样的数据库访问技术——ODBC API、MFC ODBC、DAO、OLE DB、ADO等。这些技术各有自己的特点,它们提供了

Corey的专栏 4272

利用Ghidra与SVD插件实现STM32固件深度逆向分析

本文详细介绍了如何利用Ghidra逆向工程框架结合SVD插件,实现对STM32固件(.bin文件)的深度逆向分析。通过加载描述芯片外设寄存器的SVD文件,Ghidra能将晦涩的硬件地址操作转换为可读的寄存器符号,极大提升了对嵌入式固件中通信协议、安全校验等关键逻辑的分析效率。文章涵盖了从Java环境搭建、工具配置到实战逆向解析的完整流程。

peach的博客 942

MFC使用ADO读写数据库实例

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

zhangyulin54321的专栏 1万+

Ubuntu22.04 apt 安装 ROS1 ROS Noetic Ninjemys

ubuntu 22.04 apt-get 安装 ros1 ros Noetic 最新版

autolabor的博客 5万+

RK3588开发板实战:从零开始移植Ubuntu 24.04(讯为SDK版)

本文详细介绍了如何在RK3588开发板上从零开始移植Ubuntu 24.04系统(讯为SDK版),涵盖开发环境准备、SDK解析、根文件系统定制、驱动适配、系统集成与烧录等全流程。通过实战案例,帮助开发者快速掌握RK3588开发板的系统移植技巧,适用于嵌入式开发与定制化Linux系统构建。

sand8的博客 436

在Visual C++中用ADO进行数据库编程

转载自VCKBASE:http://www.vckbase.com/document/viewdoc/?id=3071. 生成应用程序框架并初始化OLE/COM库环境   创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。本例为: BOOL CAdotestDlg::OnI

2258

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理

晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部

1万+

VC中使用ADO进行数据库操作

ADO技术简介    ADO是为MS的强大的数据访问接口 OLE DB 设计的,上一个便于使用的应用程序层。 OLE DB 为任何数据源都提供了高性能的访问,包括:关系型数据库、非关系型数据库、电子邮件、文件系统、文本和图形以及自定义业务对象等。    ADO 2.0 实际上是基于 MSADO15.DLL 这个动态链接库的,这个库文件的名字虽然和 ADO 1.5 的一样,但是它实现了更新的

唐昊的专栏 5688

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

我正用AI Agent重构传统GIS 核心功能,说大白话做空间分析

GeoAI-UP项目通过AI Agent技术实现自然语言驱动的空间分析,核心创新包括: 意图识别层:通过LLM理解用户需求,自动拆解为可执行目标 智能任务规划:动态生成分析流程,处理复杂依赖关系 统一算子架构:采用标准化接口封装200+空间分析功能 可视化工作流。

专注GIS软件开发。 496

ADO访问数据库

ADO(ActiveX Data Object的简称)是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口。ADO通过OLE DB提供访问和操作数据库服务器中的数据。ADO不仅可以访问关系型数据库,还可以访问非关系型数据库。同时由于OLE DB是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,从而大大提供了访问速度。与众多的数据

谭洪星 3825

大学计算 - 方程求解 实训答案 第3关

【代码】大学计算 - 方程求解 实训答案 第3关。

2403_89314916的博客 106
上一篇: Windows多线程多任务设计初步
下一篇: 明明白白看MFC之程序框架
ronk
博客等级 码龄22年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值