📄 0505002.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>
<body>
<div align="justify">
<table border="0" width="100%" class="font" height="57">
<tr>
<td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">VC知识库(五)</font>
</td>
<td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">www.vckbase.com</font>
</td>
</tr>
<tr>
<td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
<b><big><strong><font face="隶书"
LANG="ZH-CN">在</font><font face="隶书">VC<font LANG="ZH-CN">中使用</font>ADO<font
LANG="ZH-CN">开发数据库应用程序</font></font></strong></big></b>
</td>
</tr>
<tr>
<td width="100%" height="17" class="info" align="center" colspan="2">
<font LANG="ZH-CN"><b>Alpha,Beta</b></font>
</td>
</tr>
<tr>
<td width="100%" height="22" class="font" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="5" class="font" colspan="2">
<p ALIGN="JUSTIFY"><b><font LANG="ZH-CN">一、</font>ADO<font LANG="ZH-CN">概述</font></b></p>
<p ALIGN="JUSTIFY">ADO<font LANG="ZH-CN">是</font>Microsoft<font LANG="ZH-CN">为最新和最强大的数据访问范例</font>
OLE DB <font LANG="ZH-CN">而设计的,是一个便于使用的应用程序层接口。</font>ADO
<font LANG="ZH-CN">使您能够编写应用程序以通过</font> OLE.DB <font
LANG="ZH-CN">提供者访问和操作数据库服务器中的数据。</font>ADO <font
LANG="ZH-CN">最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。</font>ADO
<font LANG="ZH-CN">在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为</font>
ADO<font LANG="ZH-CN">,是用了一个比较熟悉的暗喻,</font>OLE <font
LANG="ZH-CN">自动化接口。</font></p>
<p ALIGN="JUSTIFY">OLE DB<font LANG="ZH-CN">是一组</font>”<font LANG="ZH-CN">组件对象模型</font>”(COM)
<font LANG="ZH-CN">接口,是新的数据库低层接口,它封装了</font>ODBC<font
LANG="ZH-CN">的功能,并以统一的方式访问存储在不同信息源中的数据。</font>OLE
DB<font LANG="ZH-CN">是</font>Microsoft UDA(Universal Data Access)<font LANG="ZH-CN">策略的技术基础。</font>OLE
DB <font LANG="ZH-CN">为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,</font>OLE
DB <font LANG="ZH-CN">并不局限于</font> ISAM<font LANG="ZH-CN">、</font>Jet <font
LANG="ZH-CN">甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在</font>
Excel <font LANG="ZH-CN">电子数据表、文本文件、电子邮件</font>/<font
LANG="ZH-CN">目录服务甚至邮件服务器,诸如</font> Microsoft Exchange <font
LANG="ZH-CN">中的数据。但是,</font>OLE DB <font LANG="ZH-CN">应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的</font>API
<font LANG="ZH-CN">应该是一座连接应用程序和</font> OLE DB <font LANG="ZH-CN">的桥梁,这就是</font>
ActiveX Data Objects (ADO)<font LANG="ZH-CN">。</p>
<b><p ALIGN="JUSTIFY">二、在</b></font><b>VC<font LANG="ZH-CN">中使用</font>ADO</p>
<p ALIGN="JUSTIFY">1<font LANG="ZH-CN">、引入</font>ADO<font LANG="ZH-CN">库文件</font></b></p>
<font LANG="ZH-CN">
<p ALIGN="JUSTIFY">使用</font>ADO<font LANG="ZH-CN">前必须在工程的</font>stdafx.h<font
LANG="ZH-CN">文件里用直接引入符号</font>#import<font LANG="ZH-CN">引入</font>ADO<font
LANG="ZH-CN">库文件</font>,<font LANG="ZH-CN">以使编译器能正确编译。代码如下所示:</p>
<b><p ALIGN="JUSTIFY">代码</b></font><b>1<font LANG="ZH-CN">:用</font>#import<font
LANG="ZH-CN">引入</font>ADO<font LANG="ZH-CN">库文件</font></p>
<p ALIGN="JUSTIFY">#import "c:\program files\common
files\system\ado\msado15.dll" </p>
<p ALIGN="JUSTIFY">no_namespaces rename("EOF" adoEOF")</b><font
LANG="ZH-CN"></p>
<p ALIGN="JUSTIFY">这行语句声明在工程中使用</font>ADO<font LANG="ZH-CN">,但不使用</font>ADO<font
LANG="ZH-CN">的名字空间,并且为了避免常数冲突,将常数</font>EOF<font
LANG="ZH-CN">改名为</font>adoEOF<font LANG="ZH-CN">。现在不需添加另外的头文件,就可以使用</font>ADO<font
LANG="ZH-CN">接口了。</font><b></p>
<p ALIGN="JUSTIFY">2<font LANG="ZH-CN">、初始化</font>OLE/COM<font LANG="ZH-CN">库环境</font></b></p>
<font LANG="ZH-CN">
<p ALIGN="JUSTIFY">必须注意的是,</font>ADO<font LANG="ZH-CN">库是一组</font>COM<font
LANG="ZH-CN">动态库,这意味应用程序在调用</font>ADO<font LANG="ZH-CN">前,必须初始化</font>OLE/COM<font
LANG="ZH-CN">库环境。在</font>MFC<font LANG="ZH-CN">应用程序里,一个比较好的方法是在应用程序主类的</font>InitInstance<font
LANG="ZH-CN">成员函数里初始化</font>OLE/COM<font LANG="ZH-CN">库环境。</p>
<p> <b></p>
<p ALIGN="JUSTIFY">代码</b></font><b>2<font LANG="ZH-CN">:初始化</font>OLE/COM<font
LANG="ZH-CN">库环境</font></p>
<p ALIGN="JUSTIFY">BOOL CADOApp<font LANG="ZH-CN">::</font>InitInstance()</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">if(!AfxOleInit())</p>
<p> <font LANG="ZH-CN"></p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY"></font>AfxMessageBox(“OLE<font LANG="ZH-CN">初始化出错</font>!”);</p>
<p ALIGN="JUSTIFY">return FALSE;</p>
<p ALIGN="JUSTIFY">}<font LANG="ZH-CN"> </p>
<dir>
</font><p ALIGN="JUSTIFY">……</p>
</dir>
<p> <font LANG="ZH-CN"></p>
<p ALIGN="JUSTIFY">}</font></b></p>
<font LANG="ZH-CN">
<p ALIGN="JUSTIFY">函数</font>AfxOleInit<font LANG="ZH-CN">在每次应用程序启动时初始化</font>OLE/COM<font
LANG="ZH-CN">库环境。</p>
<p ALIGN="JUSTIFY">同</font>DAO<font LANG="ZH-CN">和</font>CDatabase<font LANG="ZH-CN">一样,</font>ADO<font
LANG="ZH-CN">由几个接口组成:</font><b></p>
<p ALIGN="JUSTIFY">_ConnectionPtr,_CommandPtr<font LANG="ZH-CN">和</font>_RecordsetPtr.</b><font
LANG="ZH-CN"></p>
<p ALIGN="JUSTIFY">不同于</font>DAO<font LANG="ZH-CN">和</font>Cdatabase<font
LANG="ZH-CN">的是,</font>ADO<font LANG="ZH-CN">基于</font>COM<font LANG="ZH-CN">的接口,因此,假如你没有接触过</font>COM<font
LANG="ZH-CN">,你应该在使用</font>ADO<font LANG="ZH-CN">前先找有关书籍了解一下</font>COM<font
LANG="ZH-CN">。</font><b></p>
<p ALIGN="JUSTIFY">3<font LANG="ZH-CN">、</font>ADO<font LANG="ZH-CN">接口简介</font></b></p>
<p ALIGN="JUSTIFY">ADO<font LANG="ZH-CN">库包含三个基本接口</font>:_ConnectionPtr<font
LANG="ZH-CN">接口、</font>_CommandPtr<font LANG="ZH-CN">接口和</font>_RecordsetPtr<font
LANG="ZH-CN">接口。</p>
<p ALIGN="JUSTIFY"></font>_ConnectionPtr<font LANG="ZH-CN">接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的</font>SQL<font
LANG="ZH-CN">语句,如一个存储过程。使用</font>_ConnectionPtr<font
LANG="ZH-CN">接口返回一个记录集不是一个好的使用方法。通常同</font>CDatabase<font
LANG="ZH-CN">一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。</p>
<p ALIGN="JUSTIFY"></font>_CommandPtr<font LANG="ZH-CN">接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和</font>SQL<font
LANG="ZH-CN">语句。在使用</font>_CommandPtr<font LANG="ZH-CN">接口时,你可以利用全局</font>_ConnectionPtr<font
LANG="ZH-CN">接口,也可以在</font>_CommandPtr<font LANG="ZH-CN">接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局</font>_ConnectionPtr<font
LANG="ZH-CN">接口创建一个数据连接,然后使用</font>_CommandPtr<font
LANG="ZH-CN">接口执行存储过程和</font>SQL<font LANG="ZH-CN">语句。</p>
<p ALIGN="JUSTIFY"></font>_RecordsetPtr<font LANG="ZH-CN">是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同</font>_CommandPtr<font
LANG="ZH-CN">接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给</font>_RecordsetPtr<font
LANG="ZH-CN">的</font>connection<font LANG="ZH-CN">成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同</font>Command<font
LANG="ZH-CN">对象一样使用已经创建了数据连接的全局</font>_ConnectionPtr<font
LANG="ZH-CN">接口,然后使用</font>_RecordsetPtr<font LANG="ZH-CN">执行存储过程和</font>SQL<font
LANG="ZH-CN">语句。</p>
<p> <b></p>
<p ALIGN="JUSTIFY"></b></font><b>4<font LANG="ZH-CN">、使用</font>_ConnectionPtr<font
LANG="ZH-CN">接口</font></b></p>
<p ALIGN="JUSTIFY">_ConnectionPtr<font LANG="ZH-CN">是一个连接接口,它类似于</font>CDatabase<font
LANG="ZH-CN">和</font>CDaoDatabase<font LANG="ZH-CN">。它们的工作原理相似。首先创建一个</font>_ConnectionPtr<font
LANG="ZH-CN">接口实例,接着指向并打开一个</font>ODBC<font LANG="ZH-CN">数据源或</font>OLE
DB<font LANG="ZH-CN">数据提供者</font>(Provider)<font LANG="ZH-CN">。以下代码和</font>CDaoDatabase<font
LANG="ZH-CN">分别创建一个基于</font>DSN<font LANG="ZH-CN">和非</font>DSN<font
LANG="ZH-CN">的数据连接。</p>
<p> <b></p>
<p ALIGN="JUSTIFY">代码</b></font><b>3:<font LANG="ZH-CN">使用</font>CDaoDatabase<font
LANG="ZH-CN">(基于</font>DSN<font LANG="ZH-CN">)</font></p>
<p ALIGN="JUSTIFY">CDaoDatabase MyDb = new CDaoDatabase();</p>
<p ALIGN="JUSTIFY">MyDb.Open(NULL,FALSE,FALSE,"ODBC;DSN=samp;UID=admin;PWD=admin");</p>
<p> <font LANG="ZH-CN"></p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">代码</font>4:<font LANG="ZH-CN">使用</font>CDaoDatabase<font
LANG="ZH-CN">(基于非</font>DSN<font LANG="ZH-CN">)</font></p>
<p ALIGN="JUSTIFY">CDaoDatabase MyDb = new CDaoDatabase();</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -