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

ASP.NET 備份與還原 SQL Server 資料庫完整範例

     編輯:ASP.NET 基礎

核心程式碼架構

本範例封裝於獨立類別,提供 BackupDatabase 與 RestoreDatabase 兩個靜態方法,供 UI 或排程呼叫。

/**********************************************************************************
 * 功能:備份/還原 SQL Server 資料庫
 * 作者:劉功勳
 * 版本:V0.1 (C# 2.0)
 **********************************************************************************/
using System;
using System.Data.SqlClient;
using System.IO;

public class SqlBackupHelper
{
    /// 
    /// 完整備份資料庫至 .bak 檔案
    /// 
    public static bool BackupDatabase(string connectionString, string dbName, string backupFolder, out string errMsg)
    {
        errMsg = "";
        try
        {
            string fileName = $"{dbName}_{DateTime.Now:yyyyMMdd_HHmmss}.bak";
            string fullPath = Path.Combine(backupFolder, fileName);

            using (var conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = $@"BACKUP DATABASE [{dbName}] TO DISK = N'{fullPath}' 
                    WITH NOFORMAT, NOINIT, NAME = N'{dbName}-Full Backup', 
                    SKIP, NOREWIND, NOUNLOAD, STATS = 10";
                using (var cmd = new SqlCommand(sql, conn))
                {
                    cmd.CommandTimeout = 3600;
                    cmd.ExecuteNonQuery();
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            errMsg = ex.Message;
            return false;
        }
    }

    /// 
    /// 從 .bak 檔案還原資料庫(覆蓋模式)
    /// 
    public static bool RestoreDatabase(string connectionString, string dbName, string bakFilePath, out string errMsg)
    {
        errMsg = "";
        try
        {
            using (var conn = new SqlConnection(connectionString))
            {
                conn.Open();
                // 先設定單一使用者模式強制中斷現有連線
                string sql = $@"ALTER DATABASE [{dbName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
                    RESTORE DATABASE [{dbName}] FROM DISK = N'{bakFilePath}' 
                    WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10;
                    ALTER DATABASE [{dbName}] SET MULTI_USER;";
                using (var cmd = new SqlCommand(sql, conn))
                {
                    cmd.CommandTimeout = 3600;
                    cmd.ExecuteNonQuery();
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            errMsg = ex.Message;
            return false;
        }
    }
}

呼叫範例

string connStr = "Server=.;Database=master;Integrated Security=True;";
string db = "MyAppDB";
string folder = @"D:\DB_Backups";

if (SqlBackupHelper.BackupDatabase(connStr, db, folder, out string err))
    Console.WriteLine("備份成功");
else
    Console.WriteLine("失敗:" + err);

關鍵注意事項

  • 執行身分需具備 db_backupoperator / db_owner 或 sysadmin 權限。
  • 備份資料夾需授予 SQL Server 服務帳號寫入權限。
  • 還原時會強制斷開所有連線,請在維護時段執行。
  • 大型資料庫建議啟用壓縮 WITH COMPRESSION 並調整 MAXTRANSFERSIZE、BLOCKSIZE。
  • 生產環境應搭配維護計畫或 SQL Server Agent 排程,而非僅靠前端觸發。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved