【发布时间】:2013-08-26 15:51:00
【问题描述】:
根据this 文章,我制作了一个小型 WPF 应用程序来备份/恢复数据库。
代码:
using System.Windows;
using Microsoft.SqlServer.Management.Smo;
namespace DBManager
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
private Server srv;
private Database db;
private BackupDeviceItem bdi;
private int recoverymod;
public MainWindow()
{
InitializeComponent();
srv = new Server();
db = srv.Databases["MyDB"];
recoverymod = (int) db.DatabaseOptions.RecoveryModel;
bdi = new BackupDeviceItem("Test_Full_Backup1", DeviceType.File);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
BackupDB();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
RestoreDB();
}
public void BackupDB()
{
var bk = new Backup
{
Action = BackupActionType.Database,
BackupSetDescription = "Full backup of MyDB",
BackupSetName = "MyDB Backup",
Database = "MyDB"
};
bk.Devices.Add(bdi);
bk.Incremental = false;
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.SqlBackup(srv);
label1.Content = "Backup finished";
bk.Devices.Remove(bdi);
}
public void RestoreDB()
{
db.Drop();
var rs = new Restore { NoRecovery = true };
rs.Devices.Add(bdi);
rs.Database = "MyDB";
rs.SqlRestore(srv);
label1.Content = "Restoration finished";
db = srv.Databases["MyDB"];
rs.Devices.Remove(bdi);
db.RecoveryModel = (RecoveryModel) recoverymod;
}
}
}
当我点击 button1 时,备份文件按预期创建。
当我单击 button2 时,我可以看到“恢复完成”消息,一切看起来都正常,但是我无法通过另一个使用它的应用程序访问数据库。
在 SQL Management Studio 中,我在数据库名称后看到“(正在恢复...)”,看起来恢复过程永远不会完成。
Visual Studio 2010 和 SQL Server 2012
【问题讨论】:
-
已经有一个工具可以做到这一点,称为 SQL Server Management Studio。
-
我知道,但大多数目标用户没有技术能力
-
所以您想让非技术用户访问恢复 SQL 数据库?这似乎是一个非常糟糕的主意。
-
用户将单击备份按钮并选择存储备份文件的位置。如果他们需要从任何东西中恢复,那么他们单击“恢复”按钮,数据库将被恢复。这就是他们所做的一切。
标签: c# sql-server smo database-restore