我有简单的SQL应用程序,它使用MS-SQL localdb文件(.mdf)。 我希望每当应用程序关闭作为备份目的时,将此localdb文件(.mdf)复制到另一个文件夹。
但是,下面简单的代码将IOException作为这个问题的标题。 如果没有用户特定的按钮点击,我的应用程序始终与localdb文件(.mdf)保持不连接。
我发现了其他案例,但我的知识不足甚至不足以理解相似之处。
我一直非常感谢你的卓越。非常感谢你!
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (MessageBox.Show("really want to exit?", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
var greendbfileName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), string.Format("greendb_{0}.mdf", personID));
var copied_greendbfileName = string.Format(@"C:\greendb_{0}.mdf", personID);
File.Copy(greendbfileName, copied_greendbfileName);
Environment.Exit(0);
}
}
答案 0 :(得分:0)
对于正在为这种情况寻找自己的解决方案的人。我建议使用标准的BACKUP数据库命令(和RESTORE)。谢谢!
正如参考文献
How to backup a SQL Server 2014 Express Localdb (.mdf) file programmatically
答案 1 :(得分:0)
当我终止进程时,表的主键ID列奇怪地增加,如1,2,3,4,5010,6010,7010。第一次,它似乎工作正常(localdb mdf文件已成功复制但是,当我下次运行我的应用程序时,也许localdb进程的异常终止似乎会影响其功能。 我认为强制终止localdb必须非常小心,并且要由不同于我的专家进行研究。
我希望这种小经验可以帮助那些正在寻找像我这样的解决方案的人。
当打开与localdb的SQL连接时,进程(sqlservr.exe)开始工作。 文件扩展名不应为。
foreach (var process in Process.GetProcessesByName("sqlservr"))
{
process.Kill();
}
我放弃了上述方法并返回SQL Localdb的标准备份命令。
答案 2 :(得分:0)
您应该能够执行以下操作: 1.关闭与db的所有连接 2.连接到本地主数据库 3.使用该连接将数据库脱机,然后将其分离,然后复制该文件。 下次连接时,它应该只是重新附加数据库。
您可能想在此处查看我对自己问题的回答: When does LocalDB unlock the mdf file?
...这真的只是这个答案的现代化更新: https://stackoverflow.com/a/22791484/999256