我用 vs2010 和 c# 开发了一个 windows 应用程序。我想知道一种以编程方式备份和恢复本地 mdf 数据库的方法。对于 sdf 数据库,我使用文件复制,但它似乎不适用于 mdf 文件。任何人都可以帮忙吗?
问问题
2609 次
2 回答
3
以这种方式尝试:
- 转到 Sql Management Studio 并选择要备份的数据库
- 右键单击并选择“任务”->“备份”
- 根据需要调整参数,但不要确认对话框
- 按下按钮 SCRIPT 并关闭对话框
在查询窗口中,在备份命令之前插入以下文本
CREATE PROCEDURE DO_BACKUP AS BEGIN -- HERE GOES THE BACKUP TEXT CREATED BY THE SCRIPT BUTTON -- FOR EXAMPLE BACKUP DATABASE [Customers] TO DISK = N'E:\backups\customers.bak' WITH NOFORMAT, NOINIT, NAME = N'Customers - Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 END
并使用感叹号按钮执行(选择正确的数据库)。
现在您有了一个名为 DO_BACKUP 的存储过程,您可以使用普通的 ADO.NET 对象从代码中调用它,例如SqlConnection
和SqlCommand
于 2012-06-29T18:25:59.763 回答
0
我为此苦苦挣扎,接受的答案并不能解决问题,所以这是一个对我有用的解决方案(感谢dnxit)
它可能会帮助某人。
备份
try
{
var dlg = new System.Windows.Forms.FolderBrowserDialog();
var result = dlg.ShowDialog(this.GetIWin32Window());
if (result.ToString() == "OK")
{
var dbfileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "LibraryManger.mdf");
var backupConn = new SqlConnection { ConnectionString = eb.GetConnectionString() };
backupConn.Open();
var backupcomm = backupConn.CreateCommand();
var backupdb = $@"BACKUP DATABASE ""{dbfileName}"" TO DISK='{Path.Combine(dlg.SelectedPath,"LibraryManagement.bak")}'";
var backupcreatecomm = new SqlCommand(backupdb, backupConn);
backupcreatecomm.ExecuteNonQuery();
backupConn.Close();
MessageBox.Show($"Database backup has successfully stored in {Path.Combine(dlg.SelectedPath, "LibraryManagement.bak")}", "Confirmation");
}
}
catch (Exception ex)
{
if(ex.Message.Contains("Operating system error"))
{
MessageBox.Show("Please chose a public folder.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
恢复
您必须在恢复之前关闭现有连接
try
{
if (eb != null)
{
eb.DisposeConnection();
eb = null;
}
var dlg = new OpenFileDialog();
dlg.InitialDirectory = "C:\\";
dlg.Filter = "Database file (*.bak)|*.bak";
dlg.RestoreDirectory = true;
if (Equals(dlg.ShowDialog(), true))
{
using (var con = new SqlConnection())
{
con.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Database=Master;Integrated Security=True;Connect Timeout=30;";
con.Open();
var dbfileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "LibraryManger.mdf");
using (var cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = $@"RESTORE DATABASE ""{dbfileName}"" FROM DISK='{dlg.FileName}'";
cmd.ExecuteNonQuery();
}
con.Close();
}
MessageBox.Show($"Database backup has successfully restored.", "Confirmation");
eb = new EntityBroker.EntityBroker();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
于 2021-07-31T20:33:02.057 回答