为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于VB 存取SQL Server 图像数据的方法

2011-11-20 2页 pdf 90KB 30阅读

用户头像

is_672950

暂无简介

举报
基于VB 存取SQL Server 图像数据的方法 第 1期 作者简介:陆骏(1980-),男,江苏无锡人,无锡高等师范学校讲师,研究方向为计算机程序设计、计算机仿真技术。 0 引言 在一个完善的学校学生信息管理中, 图像数据的存取 是必不可少的,比如学生照片、证书照片等的保存。一方面, 这些图像数据为学生档案提供了重要的依据;另一方面,也 为快速查阅学生资料提供了基本条件。 图像数据的存取在 其它应用系统如 GIS、MIS中也有广泛的应用。 1 图像数据的存取 1.1 SQL Server 中图像数据的存储机制 在 SQL Server中,对于小于 8000个字节...
基于VB 存取SQL Server 图像数据的方法
第 1期 作者简介:陆骏(1980-),男,江苏无锡人,无锡高等师范学校讲师,研究方向为计算机程序、计算机仿真技术。 0 引言 在一个完善的学校学生信息管理中, 图像数据的存取 是必不可少的,比如学生照片、证照片等的保存。一方面, 这些图像数据为学生档案提供了重要的依据;另一方面,也 为快速查阅学生资料提供了基本条件。 图像数据的存取在 其它应用系统如 GIS、MIS中也有广泛的应用。 1 图像数据的存取 1.1 SQL Server 中图像数据的存储机制 在 SQL Server中,对于小于 8000个字节的图像数据可 以用二进制型(binary、varbinary)来示,但有时也需要保存 一些会大于 8000个字节的图片。 SQL Server提供了一种机 制,能存储每行大到 2G 的二进制对象(BLOB),这类对象可 包括 image、text 和 ntext 3 种数据类型。 Image 数据类型存 储的是二进制数据,最大长度是 2,147,483,647个字节。 1.2 SQL Server 中图像数据的存取 在 SQL Server 中,当数据小于 8000 个字节时,可以用 普 通 的 SQL 操 纵 语 句 (SELECT、INSERT、UPDATE、 DELETE) 来完成对字段的操纵, 当数据大于 8000 个字节 时,SQL 提供了 WRITETEXT、READTEXT 和 UPDATETEXT 这 3个函数来读取和修改数据。 1.3 VB 6.0 中图像数据的存取 VB 6.0 的 ADO Field 对象提供了 GetChunk 方法和 AppendChunk 方法来存取 BLOB 数据, 这两个函数实质是 通过 API 调用 WRITETEXT、READTEXT 和 UPDATETEXT 这 3个函数, 简化了调用的方法。 GetChunk方法检索其部 分或全部长二进制或字符数据。 GetChunk调用返回的数据 将赋给“变量”。 如果 Size 大于剩余的数据,则 GetChunk 仅 返回剩余的数据而无需用空白填充“变量”。如果字段为空, 则 GetChunk 方法返回 Null。 每个后续的 GetChunk 调用将 检索从前一次 GetChunk 调用停止处开始的数据。 但是,如 果从一个字段检索数据后, 在当前记录中设置或读取另一 个字段的值,ADO 将认为已从第一个字段中检索出数据。 如果在第一个字段上再次调用 GetChunk方法,ADO将把调 用解释为新的 GetChunk 操作, 并从记录的起始处开始读 取。 Field 对象的第一个 AppendChunk 调用将数据写入字 段,覆盖所有现有的数据,随后的 AppendChunk调用则添加 到现有数据。 1.4 程序实现 程序一:写数据函数 Public Function AppendBlobFromFile (blobColumn As ADODB.Field, ByVal FileName) As Boolean Dim FileNumber As Integer ‘文件号 Dim DataLen As Long ‘文件长度 Dim Chunks As Long ‘数据块数 Dim ChunkAry() As Byte ‘数据块数组 Dim ChunkSize As Long ‘数据块大小 Dim Fragment As Long ‘零碎数据大小 Dim lngI As Long ‘计数器 On Error GoTo ErrorHandle AppendBlobFromFile = False ChunkSize = 2048 ‘限制每次读取的块大小为 2K FileNumber = FreeFile ‘产生随机的文件号 Open FileName For Binary Access Read As FileNum- ber ‘打开图像文件 DataLen = LOF(FileNumber) ‘获得文件长度 If IsNull(blobColumn) Then Exit Function If DataLen = 0 Then ‘文件长度为 0 基于 VB存取 SQL Server图像数据的方法 陆 骏 (无锡高等师范学校,江苏 无锡 214001) 摘 要:介绍 SQL Server 对图像数据的存储机制和存取方法。 并针对 VB 开发工具,介绍了一种通过 ADO Field 对 象中的 GetChunk方法和 AppendChunk 方法来存取 SQL Server中图像数据的方法。 关键词:ADO Field;GetChunk;AppendChunk;SQL Server 中图分类号:TP311.52 文献标识码:A 文章编号:1672-7800(2009)01-0165-02 第 8卷 第 1期 2009年 1月 Vol.8 No.1 Jan. 2009 软 件 导 刊 Software Guide 软 件 导 刊 2009年 Close FileNumber AppendBlobFromFile = True Exit Function End If Chunks = DataLen \ ChunkSize ‘数据块的个数 Fragment = DataLen Mod ChunkSize If Fragment > 0 Then ‘先写零碎数据 ReDim ChunkAry(Fragment - 1) Get FileNumber, , ChunkAry() ‘读出文件 blobColumn.AppendChunk ChunkAry ‘调用 Append- Chunk函数写数据 End If ReDim ChunkAry(ChunkSize - 1)‘为数据块开辟空间 For lngI = 1 To Chunks ‘循环读出所有数据块 Get FileNumber, , ChunkAry() ‘读出一块数据 blobColumn.AppendChunk ChunkAry ‘在数据库中增加 数据块 Next lngI Close FileNumber ‘关闭文件 AppendBlobFromFile = True Exit Function ErrorHandle: AppendBlobFromFile = False MsgBox Err.Description, vbCritical, " 写图像数据出 错! " End Function 程序二:读数据函数 Public Function ReadbolbToFile (blobColumn As ADODB.Field, ByVal FileName) As Boolean Dim FileNumber As Integer ‘文件号 Dim DataLen As Long ‘文件长度 Dim Chunks As Long ‘数据块数 Dim ChunkAry() As Byte ‘数据块数组 Dim ChunkSize As Long ‘数据块大小 Dim Fragment As Long ‘零碎数据大小 Dim lngI As Long ‘计数器 On Error GoTo ErrorHandle ReadbolbToFile= False ChunkSize = 2048 ‘定义块大小为 2K If IsNull(blobColumn) Then Exit Function DataLen = blobColumn.ActualSize ‘获得图像大小 If DataLen < 8 Then Exit Function ‘图像大小小于 8 字节时认为不是图像信息 FileNumber = FreeFile ‘产生随机的文件号 Open FileName For Binary Access Write As FileNum- ber ‘打开存放图像数据文件 Chunks = DataLen \ ChunkSize ‘数据块数 Fragment = DataLen Mod ChunkSize ‘零碎数据 If Fragment > 0 Then ‘有零碎数据,则先读该数据 ReDim ChunkAry(Fragment - 1) ChunkAry = blobColumn.GetChunk(Fragment) Put FileNumber, , ChunkAry ‘写入文件 End If ReDim ChunkAry(ChunkSize - 1) ‘为数据块重新开 辟空间 For lngI = 1 To Chunks ‘循环读出所有块 ChunkAry = blobColumn.GetChunk(ChunkSize) ‘在数 据库中连续读数据块 Put FileNumber, , ChunkAry()‘将数据块写入文件中 Next lngI Close FileNumber ‘关闭文件 ReadbolbToFile= True Exit Function ErrorHandle: ReadbolbToFile= False MsgBox Err.Description,vbCritical,"读图像数据出错! " End Function 当 BLOB 类型的字段为空时 , 调用 AppendChunk 或 GetChunk 函数将出错。 此时如果想给该字段插入图像数 据,应该先使用 Update 语句给该字段赋初值如 0x0,以便数 据库系统为该字段分配一个页面地址来存放 BLOB数据。 2 结束语 Microsoft SQL Server为保存大二进制数据提供了存储 平台,Visual Basic6.0 为存取这种数据提供了灵活的接口。 本文介绍的用 VB接口存取 SQL Server 中大二进制数据的 方法,不但适用于图像文件,同样适用于其它类型的文件。 该方法应用于学校学生信息管理系统的图像存取, 在存取 速度、对系统的性能影响等方面都取了较为满意的效果。 参考文献: [1] 苏颖,张跃华.Visual Basic 数据库开发应用技术[M].北京:中国 铁道出版社,2006. [2] [美]SHARON BJELETICH,GREG MABLE. Microsoft SQL Serv- er7.0开发指南[M].北京:清华大学出版社,2000. [3] ROB KRAFT.Microsoft SQL Server 7.0 使用详解 [M].北京 :机械 工业出版社,1999. [4] [美]JEFFOEY P.MCMANUS.VISUAL BASIC 6.0 数据库访问技术 [M].北京:机械工业出版社,1999. [5] KEITH FRANKLIN. MICROSOFT VB.NET 开发人员指南[M]. 北 京:北京希望电子出版社,2002. (责任编辑:陈晓峰) 166- -
/
本文档为【基于VB 存取SQL Server 图像数据的方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索