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

VC中使⽤ADO的⽅法ADO中打开⼀个连接:pConnection->ConnectionString = "这⾥的字符串有下⾯四种写法"; //对连接字符串赋值pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库第⼆三个参数分别为⽤户的ID与密码,因为在连接字符串ConnectionCstring中已经设置好了,这⾥可以为空。
第四个参数可以取下⾯两个参数:adAsyncConnect,异步打开数据库,在ASP中直接⽤16。
adConnectUnspecified,同步打开数据库,在ASP中直接⽤-1。
ConnectionString根据不同的数据源,分别对应不同的写法(要记下来很困难,可以在VB中利⽤ADO控件先连接好,再将其拷贝在VC中,这样不容易出错) 1)访问Access 2000 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord" 2)访问ODBC数据 "Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;" 3)访问Oracle数据库 “Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;" 4)访问MS SQL数据库 "Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;" 使⽤ADO开发应⽤程序有两种⽅法,⼀种是直接在应⽤程序中使⽤ADO数据控件,该⽅法最简单,⽆需编写⼀⾏代码即可实现对数据库的访问,另⼀种⽅法是直接使⽤ADO对象实现对数据库的操作,该⽅法较复杂,但可以让程序员更深⼊的控制数据库。
vc6 for ado

28、图为资源视图结构,资源视图显示工程中用到的各种资源(对话
框、图标、光标、菜单、工具栏、快捷键、位图、字符串表、版本 等)。添加、删除资源等操作一般在此视图下进行。
29、图为文件视图结构,文件视图显示工程中生成的各种文件(源文
件、头文件、资源文件以及其它文件等)。编辑文件内容时一般从文 件视图迅速定位,然后双击需要修改的文件打开文件。
26、到这里已经完成了有关界面的所有设置,剩下的工作就是写代码
将我们的数据库连接起来,以及如何让输入框、输出表格、按钮等正 常工作了。首先,介绍一下“项目工作区”。
27、“项目工作区”有三种视图结构:类视图、资源视图和文件视图。
图为类视图结构,类视图显示工程中的类及类中的成员变量和成员函 数、以及全局变量。给类添加成员一般在此视图下操作。
//创建连接实例 HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection)); if( FAILED(hr) ) { m_cstringstaticResult = _T("创建Connect实例失败"); UpdateData(false); return; } //设置等待时间 m_pConnection->put_ConnectionTimeout(long(5)); //用try...catch()来捕获错误信息。 try { m_pConnection-> Open(LPCSTR(strconn),"","",adConnecsage
Maps”,打开消息映射界面,如图。 在“当前类”选择消息映射添加在哪个类,在“对象(控件)区”选择 添加消息映射的对象(控件),在“消息区”选择映射的消息,点击 添加函数“Add Function”按钮添加消息映射。
数据库开发应用VC下开发ADO的封装类

数 据 库应 用 程 序 开 发 的新 接 口, 微 软最 新 的 数 是 据 访 问 技 术 。它 被 设 计 用 来 同 新 的 数 据 访 问 层
口访问数据 , 使用 A O访 问数据库需要使用许 D
集 中的查 询结果 。
12 基本操作函数和数据结构 . 封装 的 A O 类应 包括 以下 函数 和数据 结 D
构: ,
1建 立数 据库 连 接函数 Opn tB s ( ) eDaa ae) AD 连 接数 据 库首 先 要 用到 C n et n对 O o nci o 象, 它是到 数据 库 的物 理连 接 , 理着应 用程 序和 管 数据 库之 间 的通讯 。 于大多 数 的数据 库系 统 , 对 每
个物 理 连 接都 需 要耗 费大 量 系 统 内存 , 宝 贵 是 的系统 资源 , 不可 滥用 。考 虑到 应用 程序 的效率 ,
1 建立 A O 封装类 D
1 1 AD 对象基 本模 型 . O
每 一个 数 据 库客 户 端都 只用 一 个 物理 连 接 , 且 并
应 用程序 结束 后应 该释放 。
为 了数 据类 型 转 换 的方 便 , 们 将记 录 集 数 我 据类 型 都 转 换 为 C tig类 型 , 放 在 查 询 结 果 Sr n 存 数组 p aa中 , Dt 由于 c+ + 的 C tig是 一 个 高 Sr n 效 和 功 能强 大 的类 , 们 可 以很 方 便 地 读取 记 录 我
用。
关键词 : 封装
在 过 去 几年 中 , 软 公 司 相继 推 出 了几 种数 微
在VC中使用ADO开发数据库应用程序

_RecordsetPtr接口的使用方法和CDaoDatabase类似, 通过以下代码的比较,你会发现使用_RecordsetPtr接口非常 简单(以下代码使用上面已经创建的数据连接):
代码7:使用CDaoDatabase执行SQL语句 CDaoRecordset MySet = new CDaoRecordset(MyD b); MySet->Open(AFX_DAO_USE_DEFAULT_TYPE," SELECT * FROM t_samp");
3、ADO接口简介
ADO库包含三个基本接口:_ConnectionPtr接口、 _CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一个记录集或一个空指针。通 常使用它来创建一个数据连接或执行一条不返回任何结果的 SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一 个记录集不是一个好的使用方法。通常同CDatabase一样,使 用它创建一个数据连接,然后使用其它对象执行数据输入输 出操作。 _CommandPtr接口返回一个记录集。它提供了一种简 单的方法来执行返回记录集的存储过程和SQL语句。在使用 _CommandPtr接口时,你可以利用全局_ConnectionPtr接口, 也可以在_CommandPtr接口里直接使用连接串。如果你只执 行一次或几次数据访问操作,后者是比较好的选择。但如果 你要频繁访问数据库,并要返回很多记录集,那么,你应该 使用全局_ConnectionPtr接口创建一个数据连接,然后使用 _CommandPtr接口执行存储过程和SQL语句。
但是,OLE DB 应用程序编程接口的目的是为各种应用程 序提供最佳的功能,它并不符合简单化的要求。您需要的 API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。
ADO在VC中的应用

ADO在VC++中的应用摘要介绍了ADO的特点和在VC++中如何通过ADO开发数据库应用程序。
ADO是开发访问OLE数据库应用程序所利用的一种数据库访问组件,是一种能够访问各类数据类型的连接机制。
它不仅能够通过OLEDB、ODBC访问数据库,还能够利用几乎任何一种数据源,如SQLServer、Oracle、Access、Excel和文本文件、图形文件等。
ADO 基于OLEDB,提供统一的数据访问接口,利用简单,容易把握。
关键词ADO;数据库;应用程序的开发;VC++1引言ADO是Microsoft公司新的数据访问技术,由于它是基于OLEDB接口上实现的COM对象,其性能和易用性都达到了极佳水平。
ADO并非与数据库直接打交道,而是要通过ODBC驱动程序或OLEDB连接字符串来操作数据库。
ODBC或OLEDB是应用程序与数据库进行连接通信的接口,其作用是将特定类型数据库中的数据变换为标准而能统一操作的数据源。
利用ADO对象并通过ODBC或OLEDB,能够实现对任意数据库的存取和访问。
ADO模型包括7个对象,要紧对象有3个:Connection、Command和Recordset,能够被独立创建和释放。
另外,还包括其他4个集合对象:Fields、Errors、Parameters和Properties。
一个典型的ADO应用程序利用Connection对象成立与数据源的连接,然后用一个Command 对象给出对数据库操作的命令,如插入数据或查询数据等,而Recordset用于对结果集进行保护或阅读等操作。
其中Command命令所利用的语言与低层所对应的OLEDB数据源有关,不同的数据源能够利用不同的命令语言,关于关系数据库,通常利用SQL作为命令语言。
2VC++中利用ADO开发数据库应用程序一样步骤在VC++中利用ADO开发数据库应用程序一样包括以下步骤:(1)初始化COM库,引入ADO库概念文件。
(2)用Connection对象连接数据库。
Visual-C__-ADO数据库编程入门

2、定义_ConnectionPtr型变量,并建立数据库连接
建立了与数据库服务器的连接后,才能进行其他有关数据库的访问和操作。ADO使用Connection对象来建立与数据库服务器的连接,所以它相当于MFC中的CDatabase类。和CDatabase类一样,调用Connection对象的Open方法即可建立与服务器的连接。
数据类型 _ConnectionPtr实际上就是由类模板_com_ptr_t而得到的一个具体的实例类,其定义可以到msado15.tlh、comdef.h 和comip.h这三个文件中找到。在msado15.tlh中有:
_COM_SMARTPTR_TYPEDEF(_Collection, __uuidof(_Collection));
Recordset对象的Open方法非常重要,它的第一个参数可以是一个SQL语句、一个表的名字或一个命令对象等等;第二个参数就是前面建立的连接对象的指针。此外,用Connection和Command对象的Execute方法也能得到记录集,但是只读的。4、读取当前记录的数据
我认为读取数据的最方便的方法如下:
(1)、连接到MS SQL Server
注意连接字符串的格式,提供正确的连接字符串是成功连接到数据库服务器的第一步,有关连接字符串的详细信息参见微软MSDN Library光盘。
本例连接字符串中的server_name,database_name,user_name和password在编程时都应该替换成实际的内容。
ADO编程的关键,就是熟练地运用ADO提供的各种对象(object)、方法(method)、属性(property)和容器(collection)。另外,如果是在MS SQL或Oracle等大型数据库上编程,还要能熟练使用SQL语言。二、使用#import方法的编程步骤
在VC中使用ADO开发数据库应用程序

【3】创建Connection对象并连接数据库
首先我们需要添加一个指向Connection对象的指针:
(2)通过DSN数据源对任何支持ODBC的数据库进行连接:
m_pConnection->Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);
(3)不通过DSN对SQL SERVER数据库进行连接:
m_pConnection->Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一个表名
adCmdProc:表明CommandText是一个存储过程
adCmdUnknown:未知
Execute执行完后返回一个指向记录集的指针,下面我们给出具体代码并作说明。
_variant_t RecordsAffected;
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
ConnectionString为连接字串,UserID是用户名, Password是登陆密码,Options是连接选项,用于指定Connection对象对数据的更新许可权,
VC中使用ADO控件的基本功能

VC中使用ADO控件的基本功能ADO(ActiveX Data Objects)是一组可以访问数据库的组件,它提供了一种统一的接口,允许开发者使用不同的编程语言对各种类型的数据存储进行访问和操作。
在VC中使用ADO控件可以方便地进行数据库操作,本文将介绍ADO的基本功能及相关用法。
1.引入ADO库在VC项目中使用ADO之前,首先需要引入ADO库。
可以通过以下步骤引入ADO库:a)打开VC中的项目;b)选择“项目”->“属性”;c)在属性对话框中选择“配置属性”->“常规”->“使用MFC”;d)在“使用MFC”中选择“使用共享DLL”,并点击“应用”;e)在属性对话框中选择“配置属性”->“链接器”->“输入”;f) 在“附加依赖项”中加入“odbc32.lib”和“odbccp32.lib”;g)点击“应用”和“确定”。
2.连接数据库使用ADO控件前,需要建立与数据库的连接。
连接数据库常用的一种方法是使用连接字符串。
连接字符串是一串字符,包含了数据库的相关信息,如数据库类型、地址、用户名、密码等。
可以使用以下代码建立与数据库的连接:```cpp#include <windows.h>void ConnectToDatabase_ConnectionPtr pConn;HRESULT hr = pConn.CreateInstance(__uuidof(Connection));if (SUCCEEDED(hr))_bstr_t connStr = "Provider=SQLOLEDB;DataSource=YourServerName;Initial Catalog=YourDatabaseName;UserId=YourUserId;Password=YourPassword;";hr = pConn->Open(connStr, "", "", adConnectUnspecified);if (SUCCEEDED(hr))//连接成功,可以进行数据库操作}}```在代码中,使用_ConnectionPtr表示连接对象,CreateInstance函数创建连接对象的实例,并使用Open函数打开数据库连接。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由wby272400贡献 ppt1。
在VC中使用ADO开发数据库 VC中使用 中使用ADO开发数据库 应用程序 一、ADO概述 ADO概述 ADO是Microsoft为最新和最强大的数据访问范例OLE DB 而 设计的,是一个便于使用的应用程序接口。
ADO 使您能够编写应 用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。
ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹 小。
ADO 在关键的应用方案中使用最少的网络流量,并且在前端 和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性 能的接口。
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 二、在VC中使用ADO 1、引入ADO库文件 、引入 库文件 使用ADO前必须在工程的stdafx.h文件里用直接引入符号 #import引入ADO库文件,以使编译器能正确编译。
代码如 下所示: 代码1: 引入ADO库文件 代码 :用#import引入 引入 库文件 #import "c:\program files\common files\system\ado\msado15.dll" no_namespaces rename("EOF" adoEOF") 这行语句声明在工程中使用ADO,但不使用 这行语句声明在工程中使用 ,但不使用ADO的名字 的名字 空间,并且为了避免常数冲突,将常数EOF改名为 空间,并且为了避免常数冲突,将常数 改名为 adoEOF。
现在不需添加另外的头文件,就可以使用 。
现在不需添加另外的头文件,就可以使用ADO 接口了。
接口了。
2、初始化OLE/COM库环境 初始化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=sam p;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:使用 基于DSN) 代码 使用_ConnectionPtr(基于 使用 基于 _ConnectionPtr MyDb; MyDb.CreateInstance(__uuidof(Connection)); MyDb->Open("DSN=samp;UID=admin;PWD=admin", "","",-1); 代码6:使用 基于非DSN) 代码 使用_ConnectionPtr (基于非 使用 基于非 _ConnectionPtr MyDb; MyDb.CreateInstance(__uuidof(Connection)); MyDb->Open("Provider=SQLOLEDB;SERVER=server;D ATABASE=samp;UID=admin; PWD=admin","","",-1); 5、使用_RecordsetPtr接口 、使用 接口 _RecordsetPtr接口的使用方法和CDaoDatabase类似, 通过以下代码的比较,你会发现使用_RecordsetPtr接口非常 简单(以下代码使用上面已经创建的数据连接): 代码7:使用 执行SQL语句 代码 使用CDaoDatabase执行 使用 执行 语句 CDaoRecordset MySet = new CDaoRecordset(MyD b); MySet->Open(AFX_DAO_USE_DEFAULT_TYPE," SELECT * FROM t_samp"); 代码8:使用 代码 使用_RecordsetPtr执行 执行SQL语句 语句 使用 执行 _RecordsetPtr MySet; MySet.CreateInstance(__uuidof(Recordset)); MySet->Open("SELECT * FROM some_table", MyDb.GetInterfacePtr(),adOpenDynamic,adLockO ptimistic,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和 来捕获ADO错误 否 错误,否 必须始终在代码中用 和catch来捕获 来捕获 错误 错误会使你的应用程序崩溃。