傳統「資料庫存路徑、檔案系統存實體」模式維護困難、安全性差。本文分析將圖片直接儲存於 SQL Server image 欄位的策略優劣,並提供 VB6 + Remote Data Control + OLE Container 完整實作範例。
text/ntext (字元)、image (二進位,最大 2 GB)| 考量因素 | 建議 |
|---|---|
| 單一 BLOB 大小 ≤ 8 KB | 用 varchar/varbinary 直接存資料列 |
| 單一 BLOB > 8 KB | 用 text/ntext/image |
| 資料庫 vs 檔案系統 | 優先資料庫:備份還原一致性、ACL 統一、交易完整性、分散式複寫支援 |
| 例外:須檔案系統 | 即時串流效能 (影音)、Photoshop 等唯讀檔案的應用、NTFS 遠端儲存特性 |
CREATE TABLE ImageStore (
ID INT IDENTITY PRIMARY KEY,
ImgTitle VARCHAR(50),
ImgType VARCHAR(50), -- MIME type
ImgData IMAGE
)
DataSourceName:選擇 ODBC DSN (如 pubs)SQL:SELECT * FROM ImageStoreOLE1.DataSource = MSRDC.NameOLE1.DataField = "ImgData" (對應 image 欄位)Private Sub cmdAdd_Click()
' 設定允許新增
MSRDC.EOFAction = rdAddNew
' 嵌入圖片檔案
OLE1.CreateEmbed "C:\Pictures\photo.bmp"
' 移至新記錄 (自動儲存)
MSRDC.Recordset.Update
End Sub
Private Sub cmdEdit_Click()
' 在獨立視窗開啟 OLE 物件編輯
OLE1.DoVerb vbOLEOpen
End Sub
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 內容:每行一個完整圖片路徑。
READ_COMMITTED_SNAPSHOT 減少封鎖將圖片儲存於 SQL Server image 欄位提供**管理簡易、備份一致、安全統一、遷移無痛**的優勢。VB6 透過 Remote Data Control + OLE Container 即可輕鬆實作顯示、編輯、批次匯入。現代專案建議評估 FILESTREAM/FileTable 獲得更佳串流效能與檔案系統互通性。