admin 管理员组文章数量: 1184232
2024年4月20日发(作者:yy广播器源码下载)
维普资讯
第20卷第5期
2002拒5,q
情 报科 学 V0I
May,2002
_20,No.5
用VC实现检索数据的XML存档
刘 荣萧怀志
(武汉大学信息管理学院,武汉430072)
摘 要 本文论述了信鼠管理系统中用VC实现将检索的数据集以XML格式存档的基本原理和设计方
法。
关键词XML VC信息管理系统
Saving Retrieval Data iⅡXML Format in VC++
I iu Rong Xiao Huaizhi
(School of Information Management,Wuhan University,Wuhan430072)
Abstract This paper mainly talks about how to support xml in MIS for Library by giving a sample in VC+
+The sample deFl30st-rates how tO save retrieval recordset in xm】 ̄ormat.
Keywords XML VC M碍
1 996年,万维网协会(或者叫W3C,http:∥
在VC一十6中实现对XMI 的支持,必须借助
www.w3c.org)开始设计种可扩展的标记语言,
于COM对象 COM表示Component Object Model
使其能够将SGMI 的灵活性和强大功能与已经被 (组件对象模型),是Microsoft生成软件的标准 它
广泛采用的HTMI 结合起来。这种后来变成XML
是构造二进制兼容软件的规范,可以建立能够互相
的语言继承了SGMI 的规范,而且实际上就是后者
通信的组件,而不管这些组件是用什么编程语言和
的 个子集 XMI 的数据描述机制意味着它将成
工具建立的 在COM中,接口(interface)是最值
为一种在Internet上共享信息的强大途径,因为:
得编程人员注意的,它可以定义为一个连接,用于
u)它是开放的 XMI 能够在不同的用户和程序之 控制应用程序对COM对象的访问。COM接口可以
间交换数据,而不论其平台如何 (2)它的白描述
用来访问包含指向对象方法的指针的表格 这个表
的特性使其对于B2B和企业内部阿解决方案来说
格(vtable)是一个包告指向成员对象方法的虚拟指
是一种有效的选择 (3)无需事先协调,我们就可
针表格,其作用与c++的vtable相同。COM中所
以在程序之间共享数据
有的接口都是接口lunknowm的振生接口。组件或
XMI 具有自描述数据的能力,界定XMI 内容
接口都由QUID(Globally Unique Identifier)来标
的标记会给所界定的数据中的每一个元素命名。在
识,GUID是个128位的整数,主要由机器号和产生
标记中,拄们还会发现特定的属性,它们会为所描
的时间组成.在理论上是唯一的。
述的元素提供某些附加信息 同时由于XMI 具有
为了能更好地、具体地说明在VC++6中实现
天生的扩展性,因此XML能简便而快速地根据企
检索书目信息并以XMI 格式存储检索结果,我们
业、科学规范或者其他方面的需要来构造定制的标
以一个实例来进行说明
记集。同时,每一个企业t甚至每一个人)都可以 先在SQI SERVER 7.0中建立名为lib的数
选择定义自己的XMI 标记集。这就为在不同的组 据库,创建书目表books,其sql语句为:CREATE
织和计算机应用程序之间交换信息提供了一条途
TABI E books(
径
bk code char(12)NOT NUI…I title varchar
有鉴于此,在以共享信息资源为已任的信息管
(4O)NOT NUI I ,
理系统中提供对XMI,的支持已经是当务之急 对
author varchar(20)NUI I ,city varchar(20)
如何将从关系数据库中检索出的数据以XMI 格式
NUI I .
存挡以供用户使用,是图书信息管理系统设计中必
P t year char(4)XUI I ,ztc varchar(20)
须考虑的问题
NI T T.
收稿日期 2002—02—18
维普资讯
5期 用VC实现检索数据的XML存档 523
class num varchar(20)NULL,data catalog
datetime NULL)
corn ptr t,它也被称为智能指针(smart
pointer)。智能指针自动执行COM的
Querylnter[ace、AddRef、Release函数。
下面的代码演示了在程序中怎样用#import
指令来暴加对ADO的支持。
表中字段有图书条码bk code(也是主键之所
在)、题名title、著作author、出版地city、出版年
P t year、主题词ztc、分类号class num、分编
日期date catalog。
#import c:\program files\common files\
system\ado\msado]5.dll rename( EOF ,
adoEOF )
创建存储过程ado test,该存储过程用于根据
书目题名检索书目信息,它带有一个题名参议 其
sql语句为:
CREATE PROCEDURE ado test@title
arg varchar(40)
AS
select bk code,title,author,city,ZtC from
books
对end--of--file(EOF)改名是必须的。因为在
一
个典型的VisualC++应用程序中,EoF已经用
#define定义成一个常数一1。但是在ADO中,EOF
被定义为类型Variant Bool的属性。不对用#
import指令导人的ADO类型库生成的EOF再定
义,编译时会产生错误,因为EOF属性名将被一1
替代。编译器不会将它作为~个有效的变量名而返
回编译错误的信息。
操纵一个自动化对象分两步:(1)定义一个变
量用来操纵一个COM对象。(2)宴例化一个COM
Where title=@title arg
创建缺省def date并将其绑定在books的
date catalog列上,其缺省值为数据插人时的系统
时间:create default def date as GETDATE()。
要实现检索出数据并将结果集中的数据以xml
文档的格式存档,我们不得不依赖ADO 由于ADO
是一种标准的COM对象模型,凡是支持COM和
Automation的开发平台(如Visual C一+)都可以
调用ADO。ADo的对象模型比较简单,总共有6种
对象并将被它赋予该变量。利用#import指令,用
智能指针COIn ptr t的构造器传人一个有效的
tom prt t::
CLSID或PRoGTD能用一行代码宴现上面的两步。
我们也能申明对象的变量,再用
Connection实例的代码为:
Createlnstanee()方法来宴例化该对象。如生成
对象、4种集合。其中6种对象为:Connection、
Command,Parameter, Recorderset、 Field
C0nnecti0nPtr Connl—NULL:
HRESULT hr=S OK;
Property,4种集合是Fields集合、Properties集合、
Parameters集合、Erros集合。值得注意的是ADO
的对象模型几乎是一种平板结构。
在Visuall C++中有三种方式操纵ADO;#
import、MFC OI E中的ClassWizard、Windows
hr=Conn1.CreateInstance(uuidof(Conn—
ection));
ADO Recordset对象是ADo中最常用的对
象,也是本信息管理系统中实现将从SQL
SERVER 7.0中检索出的数据以XML格式存盘的
关键 通俗的说,ADO Recordset对象代表的是整
个记录集或是执行一个命令返回的结果。前面说过,
ADO几乎是一个平行结果,这就意味着我们可以能
过Command对象获得Recordset对象,而且尤其是
Command对象对参数化查询具有不错的性能 步
骤一般为:
API中的COM 当然,#import是最强大的,可编
写出在语法上几乎与VBA(Visual Basic for
Applications)相同的代码 在调用(invoke)ADO
对象前,必须初始化(initialize)OLE。当用#import
导人一包含类型库的文件时,将生成对全局唯一标
识符GUIDs(globally unique identifiers)的声明,
ADO对象的包装类和在类型库中的被列举的类型。
对于被引用的任何类型库,Visual C++将在编译
时生成以下两个文件:以.tlh为扩展名的头文件
(包含对类型库中列举的类型和对象的声明)、以
.
(1)创建一个Command对象的实例
CommandPtr cdl=NULI :
hr=cd1.CreateInstance(uuidof(Command));
tli为扩展名的执行文件(对类型库中对象模型的 (2)为参数刨建ADO Parameter对象,这是通
过调用Command对象的CreateParameter方法来
实现。
ParameterPtr parm—NULL{parm=cdl—
每种方法的包装)。例如,你用#import导人
msado15.dU,Visual C++将生成msado15+tlh和
msado15.tli两个文件 #import指令利用到~个类
维普资讯
524 情报科学 2O卷
>CreateParameter(bstr t( title arg ),
adBSTR,adParamlnput,40,title arg);
NUI L);//将获取的字段值由变码类型转化为字符
串ITI list.insertltem(nlndex,szTitle);∥将该字
段值插入到列表框中的相应位置
nlndex+_L;
(3)用Command对象的Append方法将前一步
中创建的Parameter对象加入到Command对象的
Parameters集台中
hr=cd1一>Parameters>Append(parm);
Rsl ̄MoveNext();}
将Recordset以XML格式文件保存是使用
Recordset的xSave方法。xSave方法接受两个参
(4)调用Command对象的Execute方法返回
Recordset对象。
cdl >CommandText一 ado test”;
cdl一>CommandType=adCmdStoredProc;
cdl>ActiveConneetion=eon;
Rsl—edl >Execute(NUI I ,NULL, 1);
这里ado test就是笔者在前面建立在SQL
SERVER7.0中的一个存储过程。而con是ADO
Connection对象的一个实例,指定其与之建立连接
的数据源。
ConnectionPtr con—NULL;
hr—con Createlnstance(uuidof(Connection))
con—-C0nnectionSt ring一 DSN—test;UID=
xhz:PWD=xiaoyao; ;
con—'0pen t一 ”, , “
adConnectUnspecified);
用Recordset对象的Fields集合可以访问记录
集中的字段 为了访问Fields集台,你必须引用用
Recordset对象的Fields属性 你必须调用用Fields
对象的OetItem方法来取得所需要的Fields对象,
用FieLds对象的Value属性就可以访问到字段的
值 传给FieLds对象的Getltem方法的一个异构参
议,可以是一个BSTR字符串,也可以是一个数字。
下面的代码演示了利用Recordset对象从数据库中
取出一个字段的值,并将其插入到列表控件中。
variant t vTitle;
char szTitle[20];
int nlndex=0;
while(Rsl一>ADOEOF—VARIANT
FAI SE)
vT1tle.Clear():
vTitle—Rsl—Fie1ds斗Getltem( title )斗
Value;∥获取字段的值
ASSERT(vTitle.vt=VT BSTR);
WideCharToMuhiByte(CP ACP,0,vBk
code.bstrVa1.
1,szBK code,sizeof(szBK code),NULL,
数,一是文件名,一是存储格式。、若存储格式指定
为adPersistXMI ,xSave就在指定的文件内写入
UTF一8格式的文件流。这种格式被分为两部分:
schema段和数据段。schema段显示的是对名字空
间(也称名域,即namespace)、schema段和data段
的申明。Schema定义符台XML数据的说明并能得
到完全的校验。代码为:
CFileDialog fd(FAI SE, xml ,NUI I ,OFN
HIDEREAD0NLY j OFN OVERWRITEPROM
PT, xm1(*xm1)*.xml );//打开以XML
为文件扩展名的文件保存对话框
if(fd.DoModa J O!一IDoK)
return;
CString pathname=fd.GetPathName()://
获取设置的要保存检索结果的文件全名
bstr t fn(pathname):
Rsl—xSave(fn,adPersistXMI ):∥将检索
结果在指定的文件中存储
这样,程序就实现了将所检索出的数据以XMI
格式存档的功能。
以上程序在 ̄qndows 2000 Professiona1+VC一+
6.01_sQI SERVER 7.0环境下实现
参考文献
l Don W L】【]t Implementing ADo with Various Develop—
ment Languages.MSDN Library 2001.1 Microsoft
Corporation
2 Eugene O Lafsen等著.王建华等译MFC Programming
with Visual CT+6 Unleashed机械工业出版社,2000,
2
3 Jim Maloney编著,田雨等译Distributed COM Aplica
tion Development Using X!isual cT+6.0.清华大学出版
社,2000,9
4 David J.Kruglinski等著.希望图书创作宣译.Progra—
mming Visual C一+6 0.北京希望屯子出版杜,I 999.5
(责任蝙辑 刘风勤)
版权声明:本文标题:用VC实现检索数据的XML存档 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713597719a642613.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论