• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            TanZek's 技術空間

            勇往直前,專注于技術...

            首頁 新隨筆 聯系 聚合 管理
              7 Posts :: 19 Stories :: 13 Comments :: 0 Trackbacks

            在網上看到了不少介紹 VB 如何在 SQL SERVER 中存取圖片數據的文章。

            經自己實現后,最終把心得拿出來和大家分享。

            ?

            GOOGLE 搜索,網上的對數據庫圖片進行存儲的文章,絕大部分是來自一篇。都是采用 ADO Stream 方法使用 field 對象的 AppendChunk GetChunk 方法將大容量的二進制數組通過 Update 存儲到數據庫中。

            ?

            Dim Conn as ADODB.Connection???? ' 聲明 Connection 對象

            Dim Rs as ADODB.RecordSet??? ' 聲明 RecordSet 對象

            CONST BLOCKSIZE=4096??? ' 定義緩沖區塊大小

            ?

            Set Conn = New ADODB.Connection

            Conn.ConnectionString = " DATA SOURCE = PUBS "??? 'ODBS 數據源名稱為 PUBS

            Conn.Open

            Set Rs = New ADODB.RecordSet

            Rs.Open "test", Conn, adOpenKeyset, adLockOptimistic??? ' 數據庫表為 "test"

            ?

            Dim Data() as Byte???? ' 聲明字節型數組,存放數據庫圖片信息

            Dim FileLength as Integer??? ' 文件長度變量

            Dim BlockNum as Integer???? ' 存放緩沖區塊的個數

            Dim DataLeft as Integer????? ' 存放取整塊后的遺留信息

            ?

            Open "C:\TEST.BMP" for BINARY as #1??? ' 假設圖片文件為 C:\TEST.BMP

            Dim i as Integer

            FileLength = LOF(1)

            BlockNum = FileLength \ BLOCKSIZE????? ' 整取塊大小,得緩沖區塊數

            DataLeft = FileLength Mod BLOCKSIZE???? ' 整塊取后的遺留

            ReDim Data(BLOCKSIZE)??? ' 重新定義緩沖區塊大小為 BLOCKSIZE

            For i=1 to BlockNum

            ?????? Get #1,,Data()

            ?????? Rs(0).AppenChunk Data()??? ' Data() 復制至 Rs(0) 字段,假設 test 表中的 image 為第一字段

            Next i

            ReDim Data(DataLeft)??? ' 重新定義塊大小取得遺留信息

            Get #1,,Data()

            Rs(0).AppendChunk Data()???? ' 此時圖片信息已全部拷貝至當前記錄 Rs(0) 字段

            Close #1

            ...

            Rs.UpDate

            ?

            具體的存儲方法如上所述。

            ?

            下面將簡單的介紹取出信息的方法:

            ??? 介紹說,將圖片二進制存儲信息用 GetChunk 方法取出,將其存儲為臨時文件即可。

            REM?? Rs 為打開的數據庫表對應的 RecordSet 對象,其中的 image 對象仍然為第一字段

            REM?? 接著上面的思路

            ?

            Dim Data() as Byte??? ?' 聲明字節型數組,存放數據庫圖片信息

            Dim FileLength as Integer??? ' 文件長度變量

            Dim BlockNum as Integer???? ' 存放緩沖區塊的個數

            Dim DataLeft as Integer????? ' 存放取整塊后的遺留信息

            Dim i as Integer

            ReDim Data(BLOCKSIZE)

            Open "C:\TMP.BMP" for BINARY as #1

            FileLength = Rs(0).ActualSize

            BlockNum = FileLength \ BLOCKSIZE

            DataLeft = FileLength Mod BLOCKSIZE

            ReDim Data(BLOCKSIZE)

            For i = 1 to BlockNum

            ?????? Data() = Rs(0).GetChunk(BLOCKSIZE)??? 'GetChuk 方法有一個參數為 Size

            Next i

            Put #1,,Data()

            ReDim Data(DataLeft)
            Data() = Rs(0).GetChunk(DataLeft)

            Put #1,,Data()

            Close #1

            ?

            關于存取的內容全部于上面已經列出,組織的方法還請各位網友自行去組織一下。

            如果有什么缺乏說明或是不正確的地方,還請各位能夠指出。

            ?

            對于此問題的實現,本人還有一個設想,打算利用 SQL SERVER 的服務器端來實現存儲過程,使得客戶端的存取數據庫圖片信息更加方便。

            具體的實現可能還得努力等看書之后,期待中 ......


            后記:
            在具體存儲過程中,遇到了一個關于Rs的屬性長度的問題,原先采用的是Len(Rs(0))[Rs(0)為image對象],但測試時總是缺少一半的字符長度,后來查明對于Byte型數組進行Len()求值時,只會取到一半的數值。如:
            Dim?a(4096)?as Byte
            Msgbox Len(a())
            結果是:2048

            原因分析:可能跟VB中Len函數的ANSI或是UniCODE有關。但是了準確的原因還沒有查出,因為時間關系,暫時還不能去做,到時查出后再附上。

            posted on 2006-04-22 00:16 TanZek 閱讀(492) 評論(0)  編輯 收藏 引用 所屬分類: 家教辦公系統的開發日志
            久久精品无码一区二区app| 中文字幕亚洲综合久久菠萝蜜| 国产综合久久久久久鬼色| 伊人热热久久原色播放www| 日韩一区二区久久久久久| 国内精品久久久久久99| 国产精品一久久香蕉国产线看观看| 欧美色综合久久久久久| 久久www免费人成看国产片| 91久久香蕉国产熟女线看| 久久se这里只有精品| 久久精品国产WWW456C0M| 国产综合免费精品久久久| 久久精品国产只有精品66| 香蕉久久夜色精品国产尤物| 久久强奷乱码老熟女网站| 午夜精品久久久久久久久| 国产高潮国产高潮久久久| 亚洲国产精久久久久久久| 久久亚洲高清综合| 久久午夜福利无码1000合集| 人妻精品久久久久中文字幕69| 久久久久国产精品嫩草影院| 久久人人爽人人爽人人片av高请| 99久久精品国产一区二区| 久久综合给久久狠狠97色 | 国产L精品国产亚洲区久久| 99久久99久久精品国产| 午夜精品久久久久成人| 亚洲AV成人无码久久精品老人| 国内精品久久国产| 精品久久久久久国产91| 亚洲国产精品一区二区三区久久| 久久精品视频91| 久久不见久久见免费视频7| 国产亚洲美女精品久久久| 无码精品久久久天天影视| 久久se这里只有精品| 国产69精品久久久久777| 一级做a爰片久久毛片毛片| 久久中文字幕一区二区|