首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 結合 SQLDMO 實現 SQL Server 數據庫備份與還原(含殺進程)

     編輯:關於C#

利用 SQLDMO (SQL Distributed Management Objects) 組件在 C# WinForms 中實現數據庫備份/還原工具。關鍵亮點:還原前自動枚舉並殺死目標數據庫的所有連接進程(SPID),解決「數據庫正在使用中」導致還原失敗的問題。

核心功能模塊

  • 獲取服務器列表:SQLDMO.Application.ListAvailableSQLServers()
  • 獲取數據庫列表:連接後遍歷 SQLServer.Databases
  • 備份操作:配置 SQLDMO.Backup 對象,設置文件路徑、備份名、描述、初始化標誌,註冊 PercentComplete 事件顯示進度條。
  • 還原操作:配置 SQLDMO.Restore,關鍵步驟:
    1. EnumProcesses(-1) 獲取所有進程
    2. 解析列找到 SPID 和 DBNAME
    3. 遍歷殺死目標數據庫的進程:oSQLServer.KillProcess(spid)
    4. 設置 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);
}

UI 交互

WinForms 介面包含:服務器下拉框、認證輸入、備份路徑選擇、備份文件選擇、進度條、狀態標籤。單例模式確保工具窗體唯一實例。

注意事項

  1. 需引用 SQLDMO COM 組件(SQL Server 2000/2005/2008 兼容,較新版本建議改用 SMO)。
  2. 備份文件命名含時間戳:DBName_yyyyMMddHHmmss.DAT
  3. 還原時需指定目標數據庫名(cboDBtoBackup.Text)與備份文件路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved