Резервная База данных SQL Server с прогрессом

Кто-либо знает, как скопировать базу данных SQL Server 2005/2008 с C# и получить прогресс резервного копирования базы данных?

15
задан marc_s 29 June 2010 в 16:09
поделиться

3 ответа

Вот чистое решение 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 выдавать сообщения с уровнем серьезности 0 в указанном процентном интервале (в данном случае 1%). Свойство FireInfoMessageEventOnUserErrors и событие InfoMessage гарантируют, что код C # перехватывает эти сообщения во время выполнения, а не только в конце.

29
ответ дан 1 December 2019 в 02:01
поделиться

Вот некоторый код из MSDN с использованием SMO. Эта ссылка объясняет, как контролировать прогресс.

1
ответ дан 23 October 2019 в 21:15
поделиться
2
ответ дан 1 December 2019 в 02:01
поделиться