关闭顶部展开顶部

怎样用VB存取SQL Server中的图像数据(2)_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:浅谈SQL Server数据仓库相关概念及构建流程
基本概念: 1.多维数据集:多维数据集是联机分析处理 (OLAP) 中的主要对象,是一项可对数据仓库中的数据进行快速访问的技术。多维数据集是一个数据集合,通常从数据仓库的子集构造,并组织和汇总成一个由一组维度和度量值定义的多维结构。 2.维度:是多维数

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 '­循环读出所有块

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中大二进制数据的方法,不但适用于图像文件,同样适用于其它类型的文件。该方法应用于医院管理系统的图像存取中,在存取速度、对系统的性能影响等方面都取了满意的效果。

分享:解答SQL Server 的内存为何不断增加
当SQL Server 数据库引擎在 Microsoft Windows NT 或 Windows 2000 上运行时,其默认内存管理行为并不是获取特定的内存量,而是在不产生多余换页 I/O 的情况下获取尽可能多的内存。为此,数据库引擎获取尽可能多的可用内存,同时保留足够的可用内存以防操作

共2页上一页12下一页
来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2009-06-27
loading.. 评论加载中....
相关Mssql数据库教程
闂佹眹鍩勯崹閬嶆偤閺囶澁缍栭柛鈩冪⊕閳锋帗銇勯弴妤€浜惧銈忕秶閹凤拷
濠电偛顕慨顓㈠磻閹炬枼妲堥柡鍌濇硶婢ф稒淇婇懠顒夆偓婵嬫煟閵忊晛鐏查柟鍑ゆ嫹
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径瀣閻庣懓瀚竟鍡欐崲娑斾線鏌i姀鈺佺伈闁瑰嚖鎷�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径濠勵吋闂佽鍨庨崟顓фК闂佽閰eḿ褍螞濞戙垺鍋夐柨鐕傛嫹
闂備胶枪缁绘劙骞婃惔銊ョ劦妞ゆ帒鍊哥敮鍫曞箹鐎涙ḿ鐭掔€规洘绻堥弫鎾绘晸閿燂拷
闂備胶枪缁绘劙骞婃惔銊ョ劦妞ゆ巻鍋撻柛姘儑缁﹪鏁傞崜褏鐓撻柣搴岛閺呮繈鎯屽▎鎴犵=濞撴艾锕ョ€氾拷
闂備浇銆€閸嬫挻銇勯弽銊р槈闁伙富鍣i弻娑樷攽閹邦亞鑳虹紓浣靛妽濡炶棄顕i妸鈺婃晬婵炲棙鍨电粭锟犳⒑閸濆嫬鈧骞婇幘鑸殿潟闁跨噦鎷�
闂備礁鎼崯鐗堟叏妞嬪海绀婂鑸靛姈閻擄綁鎮规潪鎷岊劅婵炲眰鍊曢湁闁挎繂妫欑粈鈧梺鍛娚戦悧鐘茬暦閹扮増鏅搁柨鐕傛嫹
婵犵妲呴崹顏堝礈濠靛棭鐔嗘俊顖氬悑鐎氱粯銇勯幘瀵哥畺閻庢熬鎷�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓奸崶銊ヮ伕濡炪倖鎸荤换鍐偓姘虫珪娣囧﹪顢涘Δ鈧晶鍙夌節椤喗瀚�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎规洦鍓熼、娆撳礂閻撳簶鍋撻悽鍛婄厸闁割偅绻勫瓭婵犳鍣幏锟�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾闁哄苯鎳橀崺鈧い鎺嗗亾闁宠閰i獮鎴﹀箛闂堟稒顔嗛梻浣告惈鐎氭悂骞忛敓锟�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎规洩缍侀獮瀣攽閸偂绱�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径濠勭厬闂佺懓鐡ㄧ换鍕敂鐎涙ü绻嗘い鏍殔婢у弶绻濋~顔藉
闂佽楠搁崢婊堝礈濠靛鍋嬮柟鎯版閻鈹戦悩鎻掓殭闁奸潧缍婇弻銈夋嚍閵夈儱顫嶉梺缁樼壄缂嶄礁鐣峰▎鎾存櫢闁跨噦鎷�
UB闂備礁婀辩划顖炲礉濡ゅ懐宓侀柛銉㈡櫆鐎氭岸鎮楀☉娅虫垿锝為敓锟�
闂備浇澹堟ご绋款潖婵犳碍鐒鹃悗鐢电《閸嬫捇鐛崹顔句痪濠电姭鍋撻柨鐕傛嫹
闂佽楠哥粻宥夊垂閸濆嫸鑰块柛銏㈠殰
闂備礁鎲″缁樻叏妞嬪海绀婂璺虹灱閸楁碍绻涢崱妤€顒㈤柛鐐差槹缁绘稓绱欓悩鍝勫帯闂佺ǹ楠忛幏锟�
缂傚倸鍊烽悞锕傛偡閿曞倸鍨傛繝濠傚椤╅攱銇勯幒宥囶槮缂佹彃婀遍埀顒傚仯閸婃繄绱撳棰濇晩闁跨噦鎷�
©2017 www.mb5u.com婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎殿噮鍣i幃鈺呭箵閹烘挸鐦�
闂備浇銆€閸嬫捇鏌熼婊冾暭妞ゃ儻鎷�&闂備礁鎲$敮鎺懳涢弮鍫燁棅闁跨噦鎷�