簡體   English   中英

隨着進度備份SQL Server數據庫

[英]Backup SQL Server Database with progress

有人知道如何用C#備份SQL Server 2005/2008數據庫並獲得數據庫備份進度嗎?

這是一個純粹的ADO.NET解決方案,如果你在目標機器上安裝SMO / SQLDMO時遇到困難(這是后面的痛苦,如果可以,最好避免)。

public void BackupDatabase(SqlConnection con, string databaseName, string backupName, string backupDescription, string backupFilename) {
    con.FireInfoMessageEventOnUserErrors = true;
    con.InfoMessage += OnInfoMessage;
    con.Open();
    using(var cmd = new SqlCommand(string.Format(
        "backup database {0} to disk = {1} with description = {2}, name = {3}, stats = 1",
        QuoteIdentifier(databaseName),
        QuoteString(backupFilename),
        QuoteString(backupDescription),
        QuoteString(backupName)), con)) {
        cmd.ExecuteNonQuery();
    }
    con.Close();
    con.InfoMessage -= OnInfoMessage;
    con.FireInfoMessageEventOnUserErrors = false;
}

private void OnInfoMessage(object sender, SqlInfoMessageEventArgs e) {
    foreach(SqlError info in e.Errors) {
        if(info.Class > 10) {
            // TODO: treat this as a genuine error
        } else {
            // TODO: treat this as a progress message
        }
    }
}

private string QuoteIdentifier(string name) {
    return "[" + name.Replace("]", "]]") + "]";
}

private string QuoteString(string text) {
    return "'" + text.Replace("'", "''") + "'";
}

stats = 1子句告訴SQL Server以指定的百分比間隔(在這種情況下為1%)發出嚴重性為0的消息。 FireInfoMessageEventOnUserErrors屬性和InfoMessage事件確保C#代碼在執行期間而不是僅在結束時捕獲這些消息。

這是MSDN使用SMO的一些代碼 此鏈接說明了如何監控進度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM