資源描述:
《如何用vb存取sql server中的圖像數(shù)據(jù)--》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、如何用VB存取SQLServer中的圖像數(shù)據(jù)>> 本文介紹MISSQLServer對(duì)圖像數(shù)據(jù)的存儲(chǔ)機(jī)制和存取方法。針對(duì)VB開發(fā)工具,介紹了一種通過(guò)ADOField對(duì)象的GetChunk方法和AppendChunk方法來(lái)存取MISSQLServer中的圖像數(shù)據(jù)的方法?! ≡谝粋€(gè)完善的醫(yī)院信息MIS中,圖像數(shù)據(jù)的存取是必不可少的,比如X光片、CT像片的保存。一方面,這些圖像數(shù)據(jù)在遠(yuǎn)程診療為準(zhǔn)確診斷病情提供了重要的依據(jù),另一方面,也為快速查閱病人資料提供了基本條件。圖像數(shù)據(jù)的存取在其它應(yīng)用系統(tǒng)如GIS中也有廣泛的應(yīng)用?! ?、SQLServer中圖像數(shù)據(jù)的存儲(chǔ)機(jī)制 在MISS
2、QLServer中,對(duì)于小于8000個(gè)字節(jié)的圖像數(shù)據(jù)可以用二進(jìn)制型(binary、varbinary)來(lái)表示。但通常要保存的一些醫(yī)學(xué)影像圖片都會(huì)大于8000個(gè)字節(jié)。SQLServer提供了一種機(jī)制,能存儲(chǔ)每行大到2GB的二進(jìn)制對(duì)象(BLOB),這類對(duì)象可包括image、text和ntext三種數(shù)據(jù)類型。Image數(shù)據(jù)類型存儲(chǔ)的是二進(jìn)制數(shù)據(jù),最大長(zhǎng)度是231-1(2,147,483,647)個(gè)字節(jié)?! LOB數(shù)據(jù)在MISSQLServer系統(tǒng)中的存儲(chǔ)方式不同于普通的數(shù)據(jù)類型,對(duì)于普通類型的數(shù)據(jù)系統(tǒng)直接在用戶定義的字段上存儲(chǔ)數(shù)據(jù)值,而對(duì)于BLOB類型數(shù)據(jù),系統(tǒng)開辟新的存儲(chǔ)頁(yè)面
3、來(lái)存放這些數(shù)據(jù),表中BLOB類型數(shù)據(jù)字段存放的僅是一個(gè)16個(gè)字節(jié)的指針,該指針指向存放該條記錄的BLOB數(shù)據(jù)的頁(yè)面?! ?、SQLServer中圖像數(shù)據(jù)的存取 在MISSQLServer中,當(dāng)數(shù)據(jù)小于8000個(gè)字節(jié)時(shí),可以用普通的SQL操縱語(yǔ)句(SELECT、INSERT、UPDATE、DELETE)來(lái)完成對(duì)字段的操縱,當(dāng)數(shù)據(jù)大于8000個(gè)字節(jié)時(shí),SQL提供了zy_ctzy_ctzy_ctg_ctptrval160x54345 可以看出,這三個(gè)函數(shù)的使用比較復(fù)雜,雖然可以通過(guò)生成存貯過(guò)程來(lái)調(diào)用執(zhí)行,但有一個(gè)缺陷是在讀取數(shù)據(jù)時(shí),READTEXT函數(shù)讀取的數(shù)據(jù)無(wú)法直接傳遞回
4、前端應(yīng)用程序。 3、VB6.0中圖像數(shù)據(jù)的存取 VB6.0的ADOField對(duì)象提供了GetChunk方法和AppendChunk方法來(lái)存取BLOB數(shù)據(jù),這兩個(gè)函數(shù)實(shí)質(zhì)是通過(guò)API調(diào)用WRITETEXT、READTEXT和UPDATETEXT這三個(gè)函數(shù),簡(jiǎn)化了調(diào)用的方法?! 。?)GetChunk和AppendChunk方法介紹: GetChunk方法檢索其部分或全部長(zhǎng)二進(jìn)制或字符數(shù)據(jù)。GetChunk調(diào)用返回的數(shù)據(jù)將賦給變量。如果Size大于剩余的數(shù)據(jù),則GetChunk僅返回剩余的數(shù)據(jù)而無(wú)需用空白填充變量。如果字段為空,則GetChunk方法返回Null。每個(gè)后續(xù)
5、的GetChunk調(diào)用將檢索從前一次GetChunk調(diào)用停止處開始的數(shù)據(jù)。但是,如果從一個(gè)字段檢索數(shù)據(jù)然后在當(dāng)前記錄中設(shè)置或讀取另一個(gè)字段的值,ADO將認(rèn)為已從第一個(gè)字段中檢索出數(shù)據(jù)。如果在第一個(gè)字段上再次調(diào)用GetChunk方法,ADO將把調(diào)用解釋為新的GetChunk操作并從記錄的起始處開始讀取。Fiel123下一頁(yè)>>>>這篇文章來(lái)自..,。d對(duì)象的第一個(gè)AppendChunk調(diào)用將數(shù)據(jù)寫入字段,覆蓋所有現(xiàn)有的數(shù)據(jù),隨后的AppendChunk調(diào)用則添加到現(xiàn)有數(shù)據(jù)?! ∮捎谙到y(tǒng)資源總是有限的,如果一次讀(存)取大量數(shù)據(jù),可能會(huì)引起服務(wù)器、客戶機(jī)死機(jī)或是服務(wù)器的性能大大
6、下降,因此使用這兩個(gè)函數(shù)時(shí),要將圖像數(shù)據(jù)進(jìn)行分段讀寫?! ?2)程序?qū)崿F(xiàn): 程序一:寫數(shù)據(jù)函數(shù):PublicFunctionAppendBlobFromFile(blobColumnAsADODB.Field,ByValFileName)AsBooleanDimFileNumberAsInteger'文件號(hào) DimDataLenAsLong'文件長(zhǎng)度DimChunksAsLong'數(shù)據(jù)塊數(shù)DimChunkAry()AsByte'數(shù)據(jù)塊數(shù)組DimChunkSizeAsLong'數(shù)據(jù)塊大小DimFragmentAsLong'零碎
7、數(shù)據(jù)大小DimlngIAsLong'計(jì)數(shù)器OnErrorGoToErrorHandleAppendBlobFromFile=FalseChunkSize=2048'限制每次讀取的塊大小為2KFileNumber=FreeFile'產(chǎn)生隨機(jī)的文件號(hào)OpenFileNameForBinaryAccessReadAsFileNumber'打開圖像文件DataLen=LOF(FileNumber)'獲得文件長(zhǎng)度IfIsNull(blobColumn)ThenExitFunctionI