在VC++中利用ADO连接数据库(附带模块下载链接)

VC连接Oracle数据库之ODBC及ADO 一.ODBC连ORACLE:  str.Format( "Driver={Microsoft  ODBC  for  Oracle};Server=OracleServer.world;Uid=Username;Pwd=asdasd; ") 二.ADO连接ORACLE: 阅读详情

 一、首先我们学习一些预备知识

1、ADO是什么?

        微软公司的ADO (ActiveX Data Objects) 是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。ADO被设计来继承微软早期的数据访问对象层,包括RDO (Remote Data Objects) 和DAO(Data Access Objects)。ADO在1996年冬被发布。

        ADO是一种面向对象的编程接口,微软介绍说,与其同IBM和Oracle提倡的那样,创建一个统一数据库,不如提供一个能够访问不同数据库的统一接口,这样会更加实用一些。为实现这一目标,微软在数据库和微软的OLE DB中提供了一种“桥”程序,这种程序能够提供对数据库的连接。 开发人员在使用ADO时,其实就是在使用OLE DB,不过OLE DB更加接近底层。ADO的一项属性??远程数据服务,支持“数据仓库”ActiveX 组件以及高效的客户端缓存。作为ActiveX的一部分,ADO也是COM组件的一部分。ADO是由早期的微软数据接口??远程数据对象RDO演化而来的。RDO同微软的ODBC一同连接关系数据库,不过不能连接非关系数据库。

2、Connection对象Recordset对象

      最重要的三个ADO对象是Connection, Recordset和Command. 本文将主要介绍Connection和Recordset这两个对象。每个Connection的属性定义了与数据源的连接。Recordset对象接收来自数据源的数据。Recordset可以与Connection一起起使用,先建立一个连接,然后获取数据。尽管如此,Recordset也可以被单独创建,其Connection参数可以在Open属性定义。

3、ADO连接ACCESS数据库

      ACCESS是一个关系型桌面数据库管理系统,它可以用来建立中小型号的数据库应用系统,使用非常广泛.下面介绍如何使用ADO连接ACCESS数据库.在连接数据库时,需要使用Connection对象的Open方法打开与数据源的连接.

      ADO(ActiveX Data Objects)是一种操作 Microsoft 所支持的数据库的新技术。ADO可以看成是一系列的对象,应用这些功能强大的对象,即可轻松完成对数据库复杂的操作。

      具体的操作步骤可以归纳为以下几步: 
  (1) 创建数据库源名(DSN)
  (2) 创建数据库链接(Connection)
  (3) 创建数据对象
  (4) 操作数据库
  (5) 关闭数据对象和链接

4、数据类型转换

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

二、在VC中使用ADO的开发步骤:

1、引入ADO库文件

     ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C++使用的COM vtable接口。当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。

       在你自己创建的类或者头文件的开头用#import引入ADO库文件。

#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace \
rename("EOF","adoEOF")rename("BOF","adoBOF")

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


2、初始化OLE/COM环境

       值得注意到的是,ADO库是一组COM动态库,这意味着应用程序在调用ADO之前,必须初始化OLE/COM库环境。在MFC应用程序里面,一个比较好用的方法就是在应用程序主类的InitInstance成员函数里面初始化OLE/COM库环境。但是通常我们都将ADO接口封装成一个类,在类函数里面初始化,代码如下:

  ::CoInitialize(NULL); //初始化OLE/COM库环境
  
  ::CoUninitialize();  //关闭OLE/COM库环境,释放资源
  
  AfxOleInit();//初始化OLE/COM库环境(MFC自带的)

3、使用ADO库的三个基本接口

      ADO库包含三个基本接口:_ConnectionPtr接口、_RecordsetPtr接口和_CommandPtr接口。
  
   其分别对应Connection对象(完成应用程序对数据源的访问连接)、Recordset对象(将查询的结果以记录集的方式存储)和Command对象(对已连接的数据源进行命令操作)。

      (1)定义对象并创建对象实例:

方法一:

  _ConnectionPtr m_pConnection;
  _RecordsetPtr m_pRecordset;
  _CommandPtr m_pCommand;
  m_pConnection.CreateInstance(__uuidof(Connection));
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  m_pCommand.CreateInstance(__uuidof(Command));
方法二:
  _ConnectionPtr m_pConnection("ADODB.Connection");
  _RecordsetPtr m_pRecordset("ADODB.Recordset");
  _CommandPtr m_pCommand("ADODN.Command");
方法三:
  _ConnectionPtr m_pConnection;
  _RecordsetPtr m_pRecordset;
  _CommandPtr m_pCommand;
  m_pConnection.CreateInstance("ADODB.Connection");
  m_pRecordset.CreateInstance("ADODB.Recordset");
  m_pCommand.CreateInstance("ADODN.Command");
       这三种方法都是一样的,关键看你喜好。

       (2)举例:

        _ConnectionPtr接口: 

       主要用来连接数据库或者打开一个连接:

       pConnection->Open(ConnectionString,"","",adModeUnknown);///连接数据库

ConnectionString如下:

1)访问Access 2000 :"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=databaseName;UserID=userName;Password=userPassWord"  

2)访问ODBC数据 :"Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;"   

3)访问Oracle数据库:“Provider=MSDAORA;DataSourse=serverName;User ID=userName;Password=userPassword;"  

3)访问MS SQL数据库:"Provider=SQLOLEDB,Data Source=serverName;InitialCatalog=databaseName;User ID=userName;Password=userPassword;" 

4)访问ADO数据库: "UserID=;Password=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=shujuku.mdb;"


	_ConnectionPtr m_pConnection;
	m_pConnection.CreateInstance(__uuidof(Connection));
	try
	{
		// 打开本地Access库shujuku.mdb
		m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=shujuku.mdb","","",adModeUnknown);
		//SQL Server连接方法
		_bstr_t strConnect ="Provider=SQLOLEDB; Server=billgates;Database=HrMan; uid=sa; pwd=sa;";//第一种
		/*_bstr_t strConnect = "uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=shujuku.mdb;";*///第二种
		m_pConnection->Open(strConnect,"","",adModeUnknown);
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
	}
         _RecordsetPtr接口:
	_RecordsetPtr m_pRecordset;
	m_pRecordset.CreateInstance(__uuidof(Recordset));//创建实例
	CString sql;
	sql.Format("SELECT * name FROM shujuku.mdb");//查询语句
	try
	{
		m_pRecordset->Open(sql.GetBuffer(sql.GetLength()),_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());//输出错误信息
	}
	CString strName;
	while (!m_pRecordset->adoEOF)//读取数据
	{
		strName.Format("%s",(char*)(_bstr_t)m_pRecordset->GetCollect("姓名"));
		m_listbox.AddString(strName);//把读出来的内容添加到列表框中
		m_pRecordset->MoveNext();//移动记录集指针
	}

           当然读取数据的方法还有_bstr_t  TheValue=m_pRecordset->Fields->GetItem("姓名")->Value;   

        _CommandPtr接口:(例子未经测试,以后再补上具体的说明)

  _CommandPtr m_pCommand;
  HRESULT hr = m_pCommand.CreateInstance(__uuidof(Command));
  if(FAILED(hr))
  {
  	AfxMessageBox("创建Command对象实例失败!");
  }
  CString strP_mailid;
  _ParameterPtr param;
  param=m_pCommand->CreateParameter("p_mailid",adVarChar,adParamOutput,strP_mailid.GetLength()+1,_variant_t(strP_mailid));
  m_pCommand->Parameters->Append(param);
  
  m_pCommand->ActiveConnection = m_pConnection;
  m_pCommand->CommandType = adCmdStoredProc;
  m_pCommand->CommandText = _bstr_t("P_MAIL_SEND");
  try
	{
  	cmd->Execute(NULL,NULL,adCmdStoredProc);
  }
  catch (...) 
	{
	  AfxMessageBox("调用存储过程P_MAIL_SEND有错!");
	}
  try
	{
	  strP_mailid = (char*)(_bstr_t)m_pCommand->Parameters->GetItem(_variant_t("p_mailid"))->GetValue();
	}
	catch (...) 
	{
		strP_mailid = "";
	}
  m_pCommand.Detach();


三、模块化----VC中使用ADO的开发步骤(名字空间)

        在你的项目文件中新建一个generic class 类,名字自取;

        在该类当中添加ADO的三种类型的指针;

        在该类当中添加6个函数,他们分别是:1)连接函数:主要完成COM接口的初始化和数据库的连接2)获取记录集函数:主要完成根据SQL语句来获取指向数据库当中的数据的记录集指针3)执行SQL语句函数4)断开数据库连接。

         该模块下载地址:http://download.youkuaiyun.com/detail/csf111/3667364    欢迎下载交流。


VC++ ADO数据库编程实战:从Access操作到CRUD完整实现 数据库访问是桌面应用开发的核心技术之一,其本质在于为应用程序提供持久化数据存储与检索能力。在Windows平台,ActiveX Data Objects(ADO)作为一套基于COM的高层数据库接口,通过封装OLE DB的复杂性,为开发者提供了清晰的对象模型(Connection、Command、Recordset)和接近脚本语言的易用性。其技术价值在于实现了数据访问的标准化与高效性,尤其在VC++这类强类型语言中,通过智能指针(如_ConnectionPtr)和_variant_t/_bstr_t等数据类型 阅读详情

相关推荐

在VC++中使用ADO连接Oracle数据库的实现

ADO是微软提供的一个数据访问技术,它可以作为OLE DB的接口,让编程人员能够通过编程语言如C++, VB等,实现对数据库的访问。ADO以一种称为COM (Component Object Model) 的技术为基础,它封装了OLE DB提供的接口,使得数据库操作更为简单和直观。ADO库被设计为轻量级的、面向对象的接口,主要通过一组称为ADO对象的组件来提供对数据的访问。这些对象包括:ConnectionCommandRecordsetRecordError和Property等。

weixin_33670640的博客 1096

ADO接口之 _RecordsetPtr指针

移动记录指针可以通过MoveFirst()方法移动到第一条记录,MoveLast()方法移动到最后一条记录,MovePrevious()方法移动到当前记录的前一条记录,MoveNext()方法移动到当前记录的下一条记录。正值向后移动,负值向前移动。先移动记录指针到要插入的位置,用AddNew()插入一条记录,然后用PutCollect(字段名,值)写入值,最后用Update()更新到数据库;先将记录指针移动到要删除的记录的位置,直接用Delete()方法删除它,并用Update()来更新数据库即可。

zxf347085420的博客 535

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

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

weixin_42462474的博客 904

VC用ADO访问数据库全攻略

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

solsunfall的专栏 953

VC++中ADO封装类的实现与应用

活动数据对象(ActiveX Data Objects,ADO)是微软提供的一套用于数据访问的编程接口,它以对象模型的形式存在,允许开发者通过编程代码访问和操作数据库。ADO技术基于COM(Component Object Model)标准,可以访问各种类型的数据源,如关系型数据库、文件系统等。在ado2.h头文件中,我们可以发现一系列预定义的常量和类型定义。这些定义为使用ADO技术进行编程提供了基础。

weixin_42476987的博客 941

Win10ADO组件安装包

我们Win10 64位操作系统中,有通过ADO方式操作数据库会失败,无法读取数据,可能是我们缺少组件,下载后按照解压里的文件说明操作

C++ ADO方式连接mysql数据库

对于软件开发其实说白了就是在不停地和数据打交道, 所以数据库的操作是必不可少的, 接下来介绍VC开发中利用ADO建立ODBC数据源来访问MySQL数据库.        从我接触的数据库编程方式来说, 我觉得在vc开发连接数据库是比较难的, 也是很容易出错. 在android中, 系统自带sqlite数据库,只需要使用SQLiteOpenHelper抽象类即可完成与数据库的操作. 在java中,

lbcab的博客 1万+

Win10版本的ADO组件包

Win10版本的ADO组件包,文件版本号是10.0.14393.0

ado连接mysql方式_用ADO 连接mysql数据库的方法

VC++ 用ADO连接mysql数据库的方法:使用的方法是利用ADO通过建立ODBC数据源来最终达到访问MySQL的目的。1.安装mysql数据库服务器程序,也可安装appserv-win32-2.5.9.rar 里面包含了appche ,php,mysql ,安装后者可以通过网页管理数据库。因为方便所以我才用后者。安装过程中记住密码。2.建立数据库:可以通过命令行 也可以通过网页建立:htt...

weixin_31894867的博客 1798

ADO组件修复工具

这个是一个非常难得的工具,由于本人开发的软件,采用了ACCESS数据库,现场出现无法正常读写数据,困惑了好长时间,突然找到了此款修复软件,问题果真解决了,特此奉献给大家,希望对大家有帮助!

Ado访问PARADOX数据库

ADO没有PARADOX数据库的引擎,要用ADO访问PARADOX数据库,我试过三种方式来进行操作:用Microsoft.Jet.OLEDB.4.0来替代PARADOX数据库引擎。

VC++中使用ADO连接数据库

原文档来自网络下载,但是失去作者信息,无法贴原文链接 一、在VC++中使用ADO编程   ADO实际上就是由一组Automation对象构成的组件,因此可以象使用其它任何Automation对象一样使用ADO。ADO中最重要的对象有三个:Connection、Command和Recordset,它们分别表示连接对象、命令对象和记录集对象。如果您熟悉使用MFC中的ODBC类(CD

ccnyou的专栏 1万+

VC++使用ADO在数据库中操作长二进制数据

摘要:VC/C++源码,数据库应用,ADO,长二进制数据   VC++使用ADO在数据库中操作长二进制数据,操作长二进制数据的一个小实例,对此有需要的VC爱好者可以参考。

VC++对Access数据库的操作(查询、插入、更新、删除等)

Microsoft Office Access是由微软发布的关系数据库管理系统。Access数据库常应用于小型软件系统中,比如:生产管理、销售管理、库存管理等各类企业管理软件,其最大的优点是:简单易学、使用灵活。 下面我们结合实例来详细说明,在VC++ MFC中,如何使用Access数据库文件进行数据的存储,如何实现对数据库中数据的查询、插入、更新和删除等操作。 (实例可在我的优快云资源中下

小木头工作室 2万+

第一个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

详细的介绍了vc中与sql server 2008的连接方法

VC++中使用ADO连接数据库step by step

最近坛子里经常有人问起在VC++中ADO访问数据库的问题,有的要么是连接字符串不正确,要么是忘了COM的初始化,还有的根本就没有导入ADO动态库文件(msado15.dll,也有自定义的)。在此本人做了一个使用ADO访问数据库的演示demo,从最基础的使用MFC新建工程文件开始,一步步的完成数据库访问的搭建。

zxhx的blog 5900

C++借助ADO连接Access数据库

积分有什么用?免费! C++借助ADO连接Access数据库 实例项目以及相应数据表

上一篇: MFC基于消息,使用事件驱动(Message Based,Event Driven)机制
下一篇: 实验三:[图]管道铺设施工的最佳方案问题
似水如风
博客等级 码龄18年 98粉丝 60原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值