首次製作 Web 應用安裝包時,資料庫部署是核心難點。本文記錄完整流程與三種資料庫安裝方案的優劣比較。
安裝專案建立與檔案收集
- 在方案中新增「Web Setup Project」
- 於「檔案系統編輯器」中,將 Web 應用所有檔案拖入「Web Application Folder」
- 若需部署多個 Web 應用,可右鍵「Target Machine」→「Add Special Folder」→「Web Custom Folder」

SQL 資料庫部署三種方案
方案一:自訂安裝類別
- 新增
Installer Class,覆寫 Install 方法
- 在
Install 中執行 SqlConnection + SqlCommand 執行建表/建資料腳本
- 於安裝專案「自訂動作」→「Install」節點加入輸出項目
- 優點:彈性高、可互動取得連線字串、支援複雜邏輯
- 缺點:需撰寫 C# 程式碼、除錯較麻煩
方案二:SQL 腳本 + sqlcmd.exe
- 準備
.sql 腳本檔 (含 GO 分批)
- 自訂動作呼叫
sqlcmd.exe -S . -E -i script.sql
- 優點:純 SQL 維護、DBA 易審核、支援大型腳本
- 缺點:需目標機安裝 sqlcmd (SQL Server 隨附)、參數傳遞較繁瑣
方案三:專案輸出「SQL 資料庫腳本」
- Visual Studio 專案屬性 → 「部署」→ 勾選「產生 SQL 腳本」
- 建置時自動產生
CreateDatabase.sql、CreateTables.sql 等
- 安裝專案包含這些腳本,自訂動作執行
- 優點:與專案版本同步、零手工維護
- 缺點:僅支援 SQL Server 專案類型、自訂種子資料需額外處理
實戰建議
- 連線字串收集:自訂安裝 UI (Installer Dialog) 讓使用者輸入 Server/Database/帳密,寫入
CustomActionData 傳給 Install 方法
- 冪等性:腳本加入
IF NOT EXISTS、IF EXISTS DROP,支援重裝/升級
- 交易保護:腳本以
BEGIN TRY...BEGIN CATCH...ROLLBACK 包裹,失敗自動回滾
- 權限最小化:安裝時僅需
db_ddladmin、db_datawriter,安裝完成建議降權
- 日誌記錄:
msiexec /i setup.msi /l*v install.log 完整記錄供事後分析
綜合比較下,方案一 (自訂類別) 彈性最高,適合需互動配置的產品化安裝包;方案二 適合 DBA 主導、腳本獨立維護的企業內部部署;方案三 適合純開發主導、資料庫結構頻繁變更的敏捷專案。