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

ZDNet软件频道 时间:2009-04-10 作者:ahcit.com 李小琳 | 天新网 我要评论()
本文关键词:Mssql SQL SQL Server 数据库 SQL Server
本文介绍MIS SQL Server对图像数据的存储机制和存取方法。针对VB开发工具,介绍了一种通过ADO Field 对象的GetChunk 方法和AppendChunk 方法来存取MIS SQL Server中的图像数据的方法。

(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

当BLOB类型的字段为空时,调用AppendChunk或 GetChunk函数将出错。此时如果想给该字段插入图像数据,应该先使用 Update语句给该字段赋初值如0x0,以便数据库系统为该字段分配一个页面地址来存放BLOB数据。

4、 总结

Microsoft SQL Server为保存大二进制数据提供了存储平台,Visual Basic 6.0为存取这种数据提供了灵活的接口。本文介绍的用VB接口存取 MIS SQL Server中大二进制数据的方法,不但适用于图像文件,同样适用于其它类型的文件。该方法应用于医院管理系统的图像存取中,在存取速度、对系统的性能影响等方面都取了满意的效果。

Mssql

SQL

SQL Server

数据库

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134