結論
強烈建議使用 SQL Server (Express / LocalDB) 作為後端資料庫。
理由
- 原生整合: MFC/ATL 提供 `CDatabase`、`CRecordset`、`CADORecordset` 等類別,對 SQL Server (OLE DB / ODBC / ADO) 支援最完整、效能最佳。
- 免費版本足夠: SQL Server Express / LocalDB 免費、支援 10GB/資料庫、多核心、完整 T-SQL,滿足中小型網路硬碟元資料儲存需求。
- 部署簡單: LocalDB 無需獨立安裝服務,隨應用程式啟動,適合桌面端輕量部署。
- 避免 Access (Jet/ACE) 陷阱: 並發連線數限制 (255)、檔案鎖定衝突、2GB 檔案上限、無預存程序/觸發器/檢視表、網路共享極不穩定。
- 避免 SQLite 多執行緒寫入鎖定: SQLite 適合單機嵌入,網路多用戶並發寫入效能差,需自行實現鎖機制。
架構建議
- Client (MFC) ↔ ADO / ODBC ↔ SQL Server (LocalDB/Express) ↔ 檔案儲存區 (本地磁碟/NAS/S3)
- 資料庫僅存檔案元資料 (路徑、雜湊、權限、版本、使用者),**實體檔案存檔案系統**,不存 BLOB 於 DB。
- 使用 `CADORecordset` + `_ConnectionPtr` 智慧指標管理連線,參數化命令防注入。
若堅持不裝資料庫
可用 SQLite (單檔) + WAL 模式 (`PRAGMA journal_mode=WAL;`) 緩解並發,但**生產環境多用戶寫入仍不推薦**。
總之:VC++/MFC 做網路硬碟,SQL Server 是最省力、最穩、最專業的選擇。