首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 圖片二進位資料儲存策略與 VB6 實作:BLOB 欄位 vs 檔案系統完整分析

     編輯:關於SqlServer

前言

傳統「資料庫存路徑、檔案系統存實體」模式維護困難、安全性差。本文分析將圖片直接儲存於 SQL Server image 欄位的策略優劣,並提供 VB6 + Remote Data Control + OLE Container 完整實作範例。

策略分析:BLOB 存資料庫 vs 檔案系統

BLOB (Binary Large Object) 型別

  • SQL Server:text/ntext (字元)、image (二進位,最大 2 GB)
  • 儲存機制:資料列僅存 16 位元組指標指向專用資料頁,**不佔用資料列 8KB 頁面空間**

設計決策原則

考量因素建議
單一 BLOB 大小 ≤ 8 KB用 varchar/varbinary 直接存資料列
單一 BLOB > 8 KB用 text/ntext/image
資料庫 vs 檔案系統優先資料庫:備份還原一致性、ACL 統一、交易完整性、分散式複寫支援
例外:須檔案系統即時串流效能 (影音)、Photoshop 等唯讀檔案的應用、NTFS 遠端儲存特性

VB6 實作完整步驟

1. 建立含 image 欄位的資料表

CREATE TABLE ImageStore (
    ID INT IDENTITY PRIMARY KEY,
    ImgTitle VARCHAR(50),
    ImgType VARCHAR(50),  -- MIME type
    ImgData IMAGE
)

2. 表單加入控制項

  • Remote Data Control (MSRDC):連接資料庫
  • OLE Container Control (OLE1):顯示/編輯圖片
  • CommandButton:執行嵌入/編輯/批次匯入

3. 設定 MSRDC 連線

  • DataSourceName:選擇 ODBC DSN (如 pubs)
  • SQL:SELECT * FROM ImageStore

4. 綁定 OLE 控制項

  • OLE1 建立時選「取消」不指定物件
  • OLE1.DataSource = MSRDC.Name
  • OLE1.DataField = "ImgData" (對應 image 欄位)
  • 執行專案 → OLE1 自動顯示當前記錄圖片

5. 新增圖片程式碼

Private Sub cmdAdd_Click()
    ' 設定允許新增
    MSRDC.EOFAction = rdAddNew
    
    ' 嵌入圖片檔案
    OLE1.CreateEmbed "C:\Pictures\photo.bmp"
    
    ' 移至新記錄 (自動儲存)
    MSRDC.Recordset.Update
End Sub

6. 編輯現有圖片

Private Sub cmdEdit_Click()
    ' 在獨立視窗開啟 OLE 物件編輯
    OLE1.DoVerb vbOLEOpen
End Sub

7. 批次自動匯入 (無介面模式)

Private Sub cmdBatchImport_Click()
    ' 隱藏控制項提升效能
    MSRDC.Visible = False
    OLE1.Visible = False
    
    Dim FileName As String
    Open "C:\batch_list.txt" For Input As #1
    
    Do While Not EOF(1)
        Input #1, FileName
        MSRDC.Recordset.AddNew
        OLE1.CreateEmbed FileName
        MSRDC.Recordset.Update
    Loop
    
    Close #1
    MsgBox "批次匯入完成"
End Sub

batch_list.txt 內容:每行一個完整圖片路徑。

進階考量

  • 效能:大量 BLOB 讀寫建議啟用 READ_COMMITTED_SNAPSHOT 減少封鎖
  • 備份:完整備份包含 BLOB,記錄備份捕獲變更,**單一備份檔即可完整還原**
  • 遷移:`sp_attach_db` 直接移動含 BLOB 資料庫,無需額外處理檔案路徑
  • 現代替代方案:SQL Server 2008+ FILESTREAM / FileTable 結合 NTFS 流存取與資料庫管理優勢

結論

將圖片儲存於 SQL Server image 欄位提供**管理簡易、備份一致、安全統一、遷移無痛**的優勢。VB6 透過 Remote Data Control + OLE Container 即可輕鬆實作顯示、編輯、批次匯入。現代專案建議評估 FILESTREAM/FileTable 獲得更佳串流效能與檔案系統互通性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved