VC数据库编程-ADO

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

写程序,要利用到数据库,使用ADO吧,据说效率高,边学习边干活,笔记留下来。

1、导入库文件。

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

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

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

no_namespace指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。rename("EOF","adoEOF")将ADO中的EOF(文件结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。

2、初始化OLE/COM环境

ADO库是一组COM动态库,应用程序在调用ADO前,必须初始化OLE/COM库环境。
方法一    调用MFC全局函数:AfxOleInit(); 一般在应用程序类的InitInstance成员函数里调用。
方法二    ::CoInitialize(NULL); //初始化OLE/COM库环境
                ::  CoUninitialize();//既然初始化了环境,当然就有必要释放他了

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 pConn;
 //创建实例
 if (FAILED(pConn.CreateInstance("ADODB.Connection")))
 {
  AfxMessageBox("Create Instance failed!");
  return TRUE;
 }

 CString strSRC;
 //连接字符串
 strSRC = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=G://SQL//Code//Database//Link.mdb;User Id=;Password=;";
 //不返回任何结果的SQL语句:插入命令
 CString strSQL = "Insert into t_new values(/"http://www.sohu.com/")";

 _bstr_t bstrSRC(strSRC);               //数据类型转换,后讲
 pConn->Open(bstrSRC,"","",-1);    //建立数据库连接

 COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
 pConn->Execute(_bstr_t(strSQL),&vtOptional,-1); //执行语句

 pConn->Release();
 AfxMessageBox("OK");

5、使用_CommandPtr

_CommandPtr pCommand;
_RecordsetPtr pRs;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection=pConn;
pCommand->CommandText="select * from student";
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
pRs=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t varValue = pRs->GetCollect("name");
Cstring strValue=(char*)_bstr_t(varValue);

6、使用_RecordsetPtr

_RecordsetPtr pPtr;
if (FAILED(pPtr.CreateInstance("ADODB.Recordset")))
{
AfxMessageBox("Create Instance failed!");
return FALSE;
}

CString strSRC;
strSRC="Driver=SQL Server;Server=";
strSRC+="210.46.141.145";
strSRC+=";Database=";
strSRC+="mydb";
strSRC+=";UID=sa;PWD=";
strSRC+="sa";

CString strSQL = "select id,name,gender,address from personal";

_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);

if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
{
AfxMessageBox("Open table failed!");
pPtr.Release();
return FALSE;
}

while(!pPtr->GetadoEOF())
{
_variant_t varNo;
_variant_t varName;
_variant_t varSex;
_variant_t varAddress;

varNo = pPtr->GetCollect ("id");
varName = pPtr->GetCollect ("name");
varSex = pPtr->GetCollect ("gender");
varAddress = pPtr->GetCollect ("address");

CString strNo =(char *)_bstr_t(varNo);
CString strName =(char *)_bstr_t(varName);
CString strSex =(char *)_bstr_t(varSex);
CString strAddress =(char *)_bstr_t(varAddress);

strNo.TrimRight();
strName.TrimRight();
strSex.TrimRight();
strAddress.TrimRight();

int nCount = m_list.GetItemCount();
int nItem = m_list.InsertItem (nCount,_T(""));
m_list.SetItemText (nItem,0,strNo);
m_list.SetItemText (nItem,1,strName);
m_list.SetItemText (nItem,2,strSex);
m_list.SetItemText (nItem,3,strAddress);

pPtr->MoveNext();
}

pPtr->Close();
pPtr.Release();

6、关于数据类型转换

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

附一篇实用的文章:http://www.moon-soft.com/doc/51434.htm

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

相关推荐

使用VCADO进行数据库编程

使用VCADO进行数据库编程 使用VCADO进行数据库编程

_ConnectionPtr、_RecordsetPtr和_CommandPtr

1. 执行简单的SQL语句插入侧重使用_ConnectionPtr的Execute方法。 2. 执行复杂的插入侧重使用_RecordsetPtr的Open/AddNew/Update方法,注意Open得到的是游标,并非结果集(不会耗很大内存)。 3. _CommandPtr主要用于执行存储过程。 备注:权威的还是参照ADO.chm

学而不思则罔 1368

第一个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++下使用ADO操作数据库_ConnectionPtr、_RecordsetPtr和_CommandPtr

VC++下使用ADO操作数据库_ConnectionPtr、_RecordsetPtr和_CommandPtr(转) (1)、引入ADO类 #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \ rename ("EOF", "adoEOF") (2)、初始化COM 在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL); CoUn..

thanklife的专栏 1368

_CommandPtr未声明的标识符解决办法

在导入#import "C:\ProgramFiles\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")确定没有写错的情况下,也写了::CoInitialize(NULL);对组件的初始化,但一直提示“_CommandPtr”: 未声明的标识符,这个原因应该是ADO控件没有注册成功的问题,到C:\P

启舰 6758

*********ADO接口简介*********

/***********************ADO接口简介*********************************/ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_

bosswin的专栏 1877

VC6.0数据库编程ADO

                                                                                         VC6.0数据库编程ADO      在谈论了ODBC后,再来看一下使用ADO技术开发数据库管理系统的一些相关问题。      ADO是Microsoft为OLE DB 而设计的,它为操作OLE DB数据源提供了一套高层

wearily的专栏 1053

VC 数据库编程--ADO接口详解

/***********************VC 数据库编程--ADO接口详解*********************************/ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如

Wendysuly的专栏 1266

数据库编程总结

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!                数据库编程总结当前各种

hggugfn的博客 361

数据库原理 其八 数据库编程

访问数据库技术方法 数据库编程分为数据库客户端编程数据库服务器端编程数据库客户端编程主要使用ODBC API、ADOADO.net、OCI、OTL等方法;数据库服务端编程主要使用OLE DB等方法。 1、几种是数据库访问方法比较 ODBCAPI是一种适合数据库底层开发的编程方法,ODBCAPI提供大量对数据源的操作,ODBCAPI能够灵活地操作游标,支持各种帮定选项,在所有ODBC相关...

qq_40358433的博客 443

VC数据库--ADO编程

ADO方法访问数据库主要有两步:首先建立数据库连接,然后打开数据集。打开的数据集就是访问的数据。一步一步看,先看数据库的建立://定义数据库对象 CADODatabase m_Data;//定义数据集指针 CADORecordset* pAdo;//设定打开字符串,前面一部分字符串操作是固定模板,就是将数据操作和文件路径相关联 CString strPath 

三两四钱 995

VCADO数据库编程

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

maxiaolin8412的专栏 1754

VC编程中利用ADO方式访问SQL Server 2012数据库- 连接数据库 转载

VC编程中利用ADO方式访问SQL Server 2012数据库(1)- 连接数据库 转载  Sacomplex 786次阅读 2017-06-10 关注 1、ADO对象及其智能指针 ADO是进行SQL Server数据访问的最常用的方式。ADO中与数据库相关的对象主要有三个:连接对象 Connection、记录集对象 Recordset 和命令对象 Command,它们对应的智能指针分别是_C...

WZD023的博客 421

vc数据库编程 ado

介绍VCADO访问数据库全攻略,介绍了VCADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。 读者评分 10 评分次数 3 正文一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于

jwqu的专栏 943

VC数据库编程 ado

介绍VCADO访问数据库全攻略,介绍了VCADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。 读者评分 10 评分次数 3 正文一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于

daboby的专栏 736
上一篇: 快乐的100个理由
下一篇: 常用C语言字符串操作函数
Wolfe
博客等级 码龄25年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值