利用 SQLDMO (SQL Distributed Management Objects) 組件在 C# WinForms 中實現數據庫備份/還原工具。關鍵亮點:還原前自動枚舉並殺死目標數據庫的所有連接進程(SPID),解決「數據庫正在使用中」導致還原失敗的問題。
SQLDMO.Application.ListAvailableSQLServers()SQLServer.DatabasesSQLDMO.Backup 對象,設置文件路徑、備份名、描述、初始化標誌,註冊 PercentComplete 事件顯示進度條。SQLDMO.Restore,關鍵步驟:EnumProcesses(-1) 獲取所有進程SPID 和 DBNAMEoSQLServer.KillProcess(spid)ReplaceDatabase = true 覆蓋現有庫SQLDMO.QueryResults qr = oSQLServer.EnumProcesses(-1);
int colSpid = -1, colDbName = -1;
for (int i = 1; i <= qr.Columns; i++)
{
string name = qr.get_ColumnName(i).ToUpper().Trim();
if (name == "SPID") colSpid = i;
else if (name == "DBNAME") colDbName = i;
}
for (int i = 1; i <= qr.Rows; i++)
{
int spid = qr.GetColumnLong(i, colSpid);
string dbName = qr.GetColumnString(i, colDbName);
if (dbName.ToUpper() == "TargetDB".ToUpper())
oSQLServer.KillProcess(spid);
}
WinForms 介面包含:服務器下拉框、認證輸入、備份路徑選擇、備份文件選擇、進度條、狀態標籤。單例模式確保工具窗體唯一實例。
SQLDMO COM 組件(SQL Server 2000/2005/2008 兼容,較新版本建議改用 SMO)。DBName_yyyyMMddHHmmss.DATcboDBtoBackup.Text)與備份文件路徑。