2010-06-29 31 views

cevap

25

Burada zorluk hedef makinede SMO/SQLDMO yüklerken yaşıyorsanız (o eğer yapabilirsen iyi kaçınılmalıdır arkasında bir ağrı, var), saf ADO.NET çözümdür.

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 maddesi (bu durumda,% 1 olarak) belirtilen yüzde aralığında ağırlığı: 0 mesajlar gönderebilir SQL Server anlatır. FireInfoMessageEventOnUserErrors özelliği ve InfoMessage olayı, C# kodunun bu iletileri yalnızca sondan çok yürütme sırasında yakaladığından emin olur.

+0

Uzun zamandır böyle bir şey arıyordum ... bunun geri yükleme versiyonu çok farklı mı? Bilgi mesajının hangi kısmı gerçek ilerleme yüzdesinin ne olduğunu söylüyor? – Patrick

+2

Geri yükleme komutu çok benzer, ör. '= {0} veritabanını {0} diskten geri yükle, src = 1" '. Yüzde değerine gelince, ben şahsen sadece mesajın üzerinde bir regex kullanıyorum, ör. Regex.Match (e.Message, "(\ d {1,3}) yüzde"). –

1

İşte MSDN sitesinden SMO kullanarak some code yükleyebilirsiniz. This link, ilerlemenin nasıl izleneceğini açıklar.