电脑知识与技术
数据库与信息管理
电脑知识与技术SQLSERVER是现阶段应用程序最普遍采用的数据库技术,
几乎所有的应用程序都会涉及到图片图像、声音、文档等数据的存取问题,即数据库中二进制数据的存取问题。普通的数据类型直接在用户定义的字段上存取,而二进制数据显然不能。笔者在VisualBasic6.0开发环境中,采用客户机/服务器的工作方式,针对SQLServer数据库关系表中存储二进制数据的问题进行了初步分析,总结出两类基本方法,现加以比较供读者参考。
1表加实体的间接存取方法
目前二进制数据的存取大多数采用这种方法,二进制数据以文件的形式存放在计算机特定的分类目录下,数据库字段值反映的是文件的存取路径。此方法实质上并没有在数据表中存取二进制数据,相应的字段也不必设为二进制类型,但在一定的条件下仍然可以解决一些问题,且容易理解和使用。以VB6.0编程环境为例,使用要点如下:
1.1目录检查
由于二进制文件必须分类存放于统一的目录下,因此确保该目录存在。使用下面的函数代码测试目录是否存在。
Functiondirexists(pathasstring)asBoolean
Onerrorresumenext
Direxists=(dir¥(path&"\null")<>"")Endfunction
如:检查当前应用程序目录下20025061\tp目录是否存在,如
不存在则创建此目录。
Ifnotdirexists(app.path&"\20025061\tp")thenMkdirapp.path&"\20025061\tp"Endif
1.2文件检查
文件复制以前,应检查目标文件夹中是否有同名文件存在,如有则应删除,避免发生文件复制错误。如:检查125.jpg是否存在。
Functionfileexists(filenameasstring)asBooleanOnerrorresumenext
Direxists=(dir¥(filename)<>"")
Endfunction
Iffileexists(app.path&"\20025061\tp\125.jpg")thenKillapp.path&"\20025061\tp\125.jpg"Endif
1.3文件复制与数据存取
首先声明复制文件的API函数:
PrivateDeclareFunctionCopyFileLib"kernel32"Alias"Copy-FileA"(ByVallpExistingFileNameAsString,ByVallpNewFileNameAsString,ByValbFailIfExistsAsLong)AsLong。
其次在程序中确定源文件和目标文件的路径。源文件可以通过对话框控件或其它方式取得,目标文件路径使用GetappPath()函数。如由变量sfilename表示源文件,tfilename表示目标文件路径,filename表示目标文件名,可设定Tfilename=GetappPath()&"bin\"&filename,其中bin表示应用程序目录下的分类子目录。
用下列格式复制文件:
copyfileSfilename,Tfilename,0
最后将Tfilename之值写入数据库的相应字段中。
使用时从数据表中读出文件名并使用相应的应用程序打开
即可。操作完成后结果如图1、
图2:图1
复制后的目录文件结构
图2数据表中存放的数据(相片字段)
1.4局限性
由于字段存储的对象与实体是分开的,文件与数据库的统一
收稿日期:2006-04-08
作者简介:魏文胜(1968-),男,湖北公安人,湖北三峡职业技术学院高级讲师,从事VB语言的教学及研究。
在VB中存取SQLSERVER2000
二进制数据的方法
魏文胜
(湖北三峡职业技术学院,湖北宜昌443000)
摘要:表加实体的间接存取方法应用广泛、易于理解,二进制数据以文件的形式存放在特定的目录下,数据表中字段值存储文件路径,此方法不能体现SQLSERVER2000管理数据的优势;直接存取将二进制数据直接存入数据库中,存取过程均以临时文件过渡,是数据库管理二进制数据的发展方向。
sql server2000简介
关键词:二进制数据;间接存取;直接存取中图分类号:TP311文献标识码:A文章编号:1009-3044(2006)20-0034-02
TheMethodsofStoringSQLSERVER2000BinaryinVB
WEIWen-sheng
(HubeiThreeGorgesVocationalandTechnicalCollege,Yichang443000,China)
Abstract:Theindirectaccessmethodofstoringtheentityandthetableseparatelyisusedextensive,andeasytounderstand.Thebinaryareleftinthespecificdirectoryintheformoffiles.Thevalueoffieldsstoresthepathofthefileinthetable.Thismethodcan'tembodythead-vantagesofSQLSERVER2000onmanagingdata.Directaccesswhichstoresthebinaryinthedatabasedirectlywiththetemporaryfilefortran-sitionisthedevelopingdirectionofthebina
ryofthedatabasemanagement.
Keywords:binary;indirect
access;direct
access
34
数据库与信息管理电脑知识与技术
(上接第8页)
实用价值和应用前景。
参考文献:
[1]彭小宁.数据仓库与数据挖掘技术[J].怀化师专学报,2004,21(2):34-38.
[2]张二朋,黄振宇.基于数据仓库ODS的电子政务决策支持系统[J].科技情报开发与经济,2004,14(3):142-144.
[3]张庆,董红斌.基Web的数据仓库技术及其在商业银行中的应用[J].计算机应用研究,2002,(11):88-91.
[4]韩毅,何俊梅.知识管理的知识转换模式与保障措施[J].情报杂志,2004,(9):19:20,23.
[5]XinTan,DavidCYen,XiangFang.Webwarehousing:Webtechnologymeetsdatawarehousing[J].TechnologyinSociety,2003,(25):131-148.
[6]Lei-daChen,MakeNFrolick.Web-basedDataWarehouse-Foundamantals,ChanlengesandSolutions[J].InformantionSystemManagement,2000,17(2):80-86.
[7]HCWLaua,CWYWongb,IKHuic,etal.Designandimplementationofanintegratedknowledgesystem[J].Knowledge-BasedSystems,2003,(16):69-76.
[8]HamidR.Nemati,DavidM.Steiger,LakshmiS.Iyer,RichardT.Herschel.Knowledgewarehouse:anarchitecturalintegrationofknowledgemanagement,decisionsupport,artificialintelligenceanddatawarehousing[J].DecisionSupportSystems,2002,(33):143-161.
性难以保证,同时必须在操作系统下对目录文件进行安全性设置。表加实体的方法不能体现SQLSERVER2000管理数据的优势。
2采取直接存取的方法
随着SQLServer数据库管理系统功能的不断增强、性能的不断完善,将各类数据完全由数据库管理系统统一存储和管理,已成为技术发展的趋势。只有这样,SQLServer数据库管理系统的强大功能才能得到充分发挥,数据的安全性才能得到充分的保障,使得诸如数据库复制、数据的转移等许多工作,变得非常简单容易。一种方法是在窗体上设置Romotedata控件、OLE容器控件及数据表的二进制字段并将三者绑定,通过操作控件达到存取的目的。用此方法数据的显示不直观,通用性差。另一种用法是用二进制字段的APPENDCHUNK()与GETCHUNK()方法,此方法通用性强,是一种有效的方法但计算复杂、代码量大,许多资料上都有详细的说明。现笔者推荐adodb.stream对象,代码量少,使用更简单。现举例说明。
2.1添加引用
在VB中定义adodb对象。首先添加引用MicrosoftActiveXDataObjects2.6Library或高于2.6的版本,再作如下定义:dimmstreamasadodb.stream
2.2数据存储
使用如下过程将二进制文件存到记录集的字段中:
PrivateSubsavetodb(ByReffldAsADODB.Field,diskfileAsString)
DimmstreamAsADODB.Stream
IfDir(diskfile)<>""Then(diskfile表示要存储的文件)
Source=FreeFile
Setmstream=NewADODB.Stream
mstream.Type=adTypeBinary
mstream.Open
mstream.LoadFromFile(diskfile)
fld.Value=mstream.Read(fld为存储的二进制字段名,其类型为image)
Else
MsgBox"文件有问题!",vbExclamation,"注意"
EndIf
EndSub
如:要将E:\AAA.DOC文件存入记录集strec的tmdaimage字段中,采用下列格式调用过程:
Callsavetodb(strec("tmdaimage"),"e:\aaa.doc"))
2.3数据取出
使用如下过程将image类型字段读出到文件中:
PrivateSubsavetofile(ByReffldAsADODB.Field,diskfileAsString)
DimmstreamAsADODB.Stream
Setmstream=NewADODB.Stream
mstream.Type=adTypeBinary
mstream.Open
mstream.Writefld.Value
mstream.savetofilediskfile,adSaveCreateOverWrite
EndSub
Diskfile为临时保存的文件名,必须指定扩展名。
如:要将记录集strec的tmdaimage字段值读入到E:\AAA.DOC文件中,采用下列格式调用过程:
Callsavetofile(strec("tmdaimage"),"e:\aaa.doc"))
2.4关于stream对象主要方法的说明
2.4.1LoadFromFile方法
使用方法如下:
Object.LoadFromFile(FileName)
说明:将FileName指定的文件装入对像中,参数FileName为指定的文件名。
2.4.2SaveToFile方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中。
参数说明:FileName指定的文件
Options存取的选项,可不指定,可选参数如下:
adSaveCreateNotExist=1
adSaveCreateOverWrite=2
2.4.3Open方法
使用方法如下:
Object.Open
说明:打开对像。
2.4.4Close方法
使用方法如下:
Object.Close
说明:关闭对像。
3结束语
使用adodb.stream对象,二进制数据的存取都有必须以临时文件过渡。使用时也必须以文件为操作对象,在文件读出以前,必须知道文件类型。笔者以图片、WORD文档、AVI影像文件实践均成功。
上述介绍了两大类方法,表加实体的方法虽然有很多局限性,但大部分应用程序不支持OLE自动化,对象在VB窗体中不能现场编辑,这些应用程序只能访问文件,在此种情况下表加实体是更好的选择。随着应用程序之间数据交换技术的进步以及直接存取的巨大优越性,直接存取技术必获得更加广泛的应用。
参考文献:
[1]赵斯明.VisualBasic数据库编程技术与实例[M].北京:人民邮电出版社.
[2]求是科技.SQLSERVER2000数据库管理与开发技术大全[M].北京:人民邮电出版社.
[3]FrancesoBalena.VisualBasic6.0编程技术大全[M].北京:机械工业出版社.
[4]DanAppleman.VisualBasic5.0Win32API开发人员指南[
M].北京:机械工业出版社.
35

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。