手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

如何用VB存取SQL Server中的图像数据

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

能够看出,这三个函数的使用比较复杂,虽然能够通过生成存贮过程来调用执行,但有一个缺陷是在读取数据时,READTEXT函数读取的数据无法直接传递回前端应用程式。

3、 VB 6.0中图像数据的存取

VB 6.0 的ADO Field 对象提供了GetChunk 方法和AppendChunk 方法来存取BLOB数据,这两个函数实质是通过API调用WRITETEXT 、READTEXT和UPDATETEXT这三个函数,简化了调用的方法。

(1)GetChunk 和AppendChunk方法介绍

GetChunk 方法检索其部分或全部长二进制或字符数据。GetChunk 调用返回的数据将赋给“变量”。假如 Size 大于剩余的数据,则 GetChunk 仅返回剩余的数据而无需用空白填充“变量”。假如字段为空,则 GetChunk 方法返回 Null。每个后续的 GetChunk 调用将检索从前一次 GetChunk 调用停止处开始的数据。但是,假如从一个字段检索数据然后在当前记录中配置或读取另一个字段的值,ADO 将认为已从第一个字段中检索出数据。假如在第一个字段上再次调用 GetChunk 方法,ADO 将把调用解释为新的 GetChunk 操作并从记录的起始处开始读取。Field 对象的第一个 AppendChunk 调用将数据写入字段,覆盖任何现有的数据,随后的 AppendChunk 调用则添加到现有数据。

由于系统资源总是有限的,假如一次读(存)取大量数据,可能会引起服务器、客户机死机或是服务器的性能大大下降,因此使用这两个函数时,要将图像数据进行分段读写。

(2)程式实现

程式一:写数据函数

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 FileNumber     '打开图像文档

            DataLen = LOF(FileNumber)               '获得文档长度

            If IsNull(blobColumn) Then Exit Function

            If DataLen = 0 Then                      '文档长度为0

            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   '调用AppendChunk函数写数据

            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 FileNumber  '打开存放图像数据文档

            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                               '&shy;循环读出任何块

            ChunkAry = blobColumn.GetChunk(ChunkSize)   '在数据库中连续读数据块

            Put FileNumber, , ChunkAry()     '将数据块写入文档中

            Next lngI

            Close FileNumber                 '关闭文档

            ReadbolbToFile= True

            Exit Function

            ErrorHandle:

            ReadbolbToFile= False

            MsgBox Err.Description, vbCritical, "读图像数据出错!"

            End Function

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!