成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MIS SQL Server中的圖像數據描述

數據庫 SQL Server
我們今天主要向大家講述的是正確的用VB來對SQL Server數據庫中的圖像數據進行存取的實際操作,下面就是文章的主要內容描述。

以下的文章主要教會大家的是如何正確的用VB來對SQL Server數據庫中的圖像數據進行存取,本文介紹MIS SQL Server對圖像數據的存儲機制和存取方法。針對VB開發工具,介紹了一種通過ADO Field 對象的GetChunk 方法和AppendChunk 方法來存取MIS SQL Server中的圖像數據的方法。

 

在一個完善的醫院信息MIS中,圖像數據的存取是必不可少的,比如X光片、CT像片的保存。一方面,這些圖像數據在遠程診療為準確診斷病情提供了重要的依據,另一方面,也為快速查閱病人資料提供了基本條件。圖像數據的存取在其它應用系統如GIS中也有廣泛的應用。

 

 

1、SQL Server中圖像數據的存儲機制

 

 

在MIS SQL Server中,對于小于8000個字節的圖像數據可以用二進制型(binary、varbinary)來表示。但通常要保存的一些醫學影像圖片都會大于 8000個字節。SQL Server提供了一種機制,能存儲每行大到2GB的二進制對象(BLOB),這類對象可包括image、text和ntext三種數據類型。Image數據類型存儲的是二進制數據,***長度是231-1 (2,147,483,647)個字節。

 

 

BLOB數據在MIS SQL Server系統中的存儲方式不同于普通的數據類型,對于普通類型的數據系統直接在用戶定義的字段上存儲數據值,而對于BLOB類型數據,系統開辟新的存儲頁面來存放這些數據,表中BLOB類型數據字段存放的僅是一個16個字節的指針,該指針指向存放該條記錄的BLOB數據的頁面。

 

 

2、SQL Server中圖像數據的存取

 

 

在MIS SQL Server中,當數據小于8000個字節時,可以用普通的SQL操縱語句(SELECT、INSERT、UPDATE、DELETE)來完成對字段的操縱,當數據大于8000個字節時,SQL提供了WRITETEXT 、READTEXT和UPDATETEXT這三個函數來讀取和修改數據。這三個函數的使用方法為:

 

 

(1) WRITETEXT {table.column text_ptr}[WITH LOG] {data}

 

 

table.column為表中的字段,text_ptr為一個16個字節的指針,data為要寫的數據值。可選參數WITH LOG表示是否要寫入日志文件中。

 

 

例:

 

DECLARE @ptrval binary(16) --指針

  1. SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001 WRITETEXT zy_ct.img_ct @ptrval 0x024324142342134214213421421454353452341 

(2) READTEXT {table.column text_ptr offset size} [HOLDLOCK]

 

table.column為表中的字段,text_ptr為一個16個字節的指針,offset 為偏移量,即從第幾個字節開始讀數據,size為要讀的字節數,HOLDLOCK 為在讀數據中是否充許其他用戶修改該數據。

 

 

例:

 

 

  1. DECLARE @ptrval varbinary(16) SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001 READTEXT zy_ct.img_ct @ptrval 1 25 

(3) UPDATETEXT

 

  1. {table_name.dest_column_name dest_text_ptr} {NULL|insert_offset}{ NULL | delete_length} [WITH LOG][ inserted_data| {table_name.src_column_name src_text_ptr}] 

table_name.dest_column_name 為要修改的text, ntext, 或 image字段;dest_text_ptr為指向其的指針;insert_offset為偏移量,對于text和image為從第幾開始字節開始寫,對于ntext為從第幾個字符(雙字節)開始寫;delete_length為從insert_offset開始刪除delete_length長度的字節(符),為0時不刪除,為NULL時為刪除從insert_offset開始到結束的所有數據。要插入的數據為 inserted_data為,也可是表table_name的src_column_name字段中指針 src_text_ptr所指數據。

 

例:

 

 

  1. DECLARE @ptrval binary(16) SELECT @ptrval = TEXTPTR(img_ct) FROM zy_ct WHERE id_ct = 20010101001 UPDATETEXT zy_ct.img_ct @ptrval 16 0x54345 

可以看出,這三個函數的使用比較復雜,雖然可以通過生成存貯過程來調用執行,MIS SQL Server但有一個缺陷是在讀取數據時,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)程序實現:

 

 

程序一:寫數據函數:

 

 

  1. 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 

程序二:讀數據函數:

 

  1. Public Function ReadbolbToFile (blobColumn As ADODB.Field, ByVal FileName) As Boolean Dim FileNumber As Integer '文件號  
  2. Dim DataLen As Long '文件長度 Dim Chunks As Long '數據塊數 Dim ChunkAry() As Byte '數據塊數組   
  3. Dim ChunkSize As Long '數據塊大小 Dim Fragment As Long '零碎數據大小 Dim lngI As Long '計數器   
  4. On Error GoTo ErrorHandle ReadbolbToFileFalse ChunkSize = 2048 '定義塊大小為 2K If IsNull(blobColumn)   
  5. Then Exit Function DataLen = blobColumn.ActualSize '獲得圖像大小 If DataLen < 8 Then Exit Function '  
  6. 圖像大小小于8字節時認為不是圖像信息 FileNumber = FreeFile '產生隨機的文件號 Open FileName For Binary   
  7. Access Write As FileNumber '打開存放圖像數據文件 Chunks = DataLen ChunkSize '數據塊數  
  8. Fragment = DataLen Mod ChunkSize '零碎數據 If Fragment > 0 Then '有零碎數據,則先讀該數據   
  9. ReDim ChunkAry(Fragment - 1)  ChunkAry = blobColumn.GetChunk(Fragment)  Put FileNumber, ,   
  10. ChunkAry '寫入文件 End If ReDim ChunkAry(ChunkSize - 1) '為數據塊重新開辟空間 For lngI = 1 
  11. To Chunks '&shy;循環讀出所有塊 ChunkAry = blobColumn.GetChunk(ChunkSize) '  
  12. 在數據庫中連續讀數據塊 Put FileNumber, , ChunkAry() '將數據塊寫入文件中 Next lngI Close FileNumber '  
  13. 關閉文件 ReadbolbToFileTrue Exit Function ErrorHandle:  
  14. ReadbolbToFileFalse MsgBox Err.Description, vbCritical, "讀圖像數據出錯!" End Function  

當BLOB類型的字段為空時,調用AppendChunk或 GetChunk函數將出錯。此時如果想給該字段插入圖像數據,應該先使用 Update語句給該字段賦初值如0x0,以便數據庫系統為該字段分配一個頁面地址來存放BLOB數據。

 

4、總結

 

 

Microsoft SQL Server為保存大二進制數據提供了存儲平臺,Visual Basic 6.0為存取這種數據提供了靈活的接口。本文介紹的用VB接口存取 MIS SQL Server中大二進制數據的方法,不但適用于圖像文件,同樣適用于其它類型的文件。該方法應用于醫院管理系統的圖像存取中,在存取速度、對系統的性能影響等方面都取了滿意的效果。

 

【編輯推薦】

  1. SQL Server存儲過程之經驗與優化
  2. SQL Server數據庫中優化索引的妙招
  3. SQL Server數據庫如何正確加密?
  4. SQL Server2005數據庫連接中易出現的錯誤列舉
  5. 實現SQL Server 2005中的模糊查找包并不難

 

責任編輯:佚名 來源: 新華網
相關推薦

2010-07-09 17:16:53

SQL Server數

2010-06-30 11:16:50

SQL Server

2010-07-05 13:29:56

2010-06-17 15:09:49

SQL Server

2010-06-30 09:36:25

SQL Server

2010-07-06 12:34:28

SQL Server數

2010-07-07 10:54:22

SQL Server索

2010-07-05 13:36:21

SQL Server

2010-07-22 10:30:36

SQL Server數

2010-07-12 17:06:30

SQL Server

2010-07-20 08:35:54

SQL Server鎖

2010-06-28 13:56:16

SQL Server代

2010-07-07 09:27:15

SQL Server索

2010-07-09 10:08:53

SQL Server函

2010-07-19 18:04:23

SQL Server鎖

2011-08-10 09:12:44

SQL Server插入圖像存儲過程

2010-07-23 16:03:36

SQL Server存

2010-07-07 10:31:43

SQL Server數

2010-07-05 12:33:13

SQL Server

2010-06-18 10:50:55

ms SQL Serv
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中国大陆高清aⅴ毛片 | 老司机67194精品线观看 | 日本午夜网| 亚洲成人毛片 | 国产毛片毛片 | 欧美在线视频一区二区 | 日韩毛片视频 | 中文字幕av网站 | 国产精品亚洲一区二区三区在线 | av一二三区| 亚洲视频在线观看 | 91视频入口 | 精品亚洲一区二区三区四区五区 | 少妇黄色 | 日韩精品一区在线观看 | 亚洲国产精品一区二区久久 | a国产视频 | 国产一区二区在线免费观看 | 草草视频在线免费观看 | 美女天堂av| 久久亚洲精品国产精品紫薇 | 成人在线电影网站 | 国内精品视频 | 免费av毛片 | 国产一区二区在线视频 | 日日日日日日bbbbb视频 | av电影一区二区 | av一区二区三区四区 | 91久久婷婷| 欧美日一区二区 | 久久亚洲国产精品 | 伊人网综合在线观看 | 亚洲一区二区三区在线 | 欧美在线亚洲 | 国产一区二区三区四区hd | 日本爱爱视频 | 久久久激情视频 | .国产精品成人自产拍在线观看6 | 男人天堂国产 | 国产在线观看一区二区三区 | 成人毛片一区二区三区 |