gpt4 book ai didi

c# - 使用进度备份 SQL Server 数据库

转载 作者:可可西里 更新时间:2023-11-01 03:14:24 26 4
gpt4 key购买 nike

有谁知道如何用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# 代码在执行期间捕获这些消息,而不仅仅是在结束时。

关于c# - 使用进度备份 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3142171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com