我正在尝试为Windows窗体应用程序创建备份和恢复功能。如何以编程方式恢复SQL本地数据库
所以,我试图做一个数据库恢复。我的代码是这样的:
string cbdfilename = "c:\\Users\\Public\\Public Document";
SqlConnection.ClearAllPools();
SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\BbCon.mdf;Integrated Security=True;Connect Timeout=30;");
string sql;
sql = "Use master;Alter Database BbCon Set Single_User With Rollback Immediate;Restore Database BbCon From Disk = @FILENAME With Replace;Alter Database BbCon Set Multi_User;";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("@FILENAME", cbdfilename);
con.Open();
try
{
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show("Restore DB failed" + ex.ToString());
}
finally
{
con.Close();
con.Dispose();
}
但是当我尝试运行此,我得到一个错误:
Restore db failed System.Data.SqlClient.SqlException(0X80131904):userdoesnot have permission to alter database BbCon.mdf the database doesnot exist or or datbase is not in a state that allows access checks.
谁能帮助我吗?
这是一个本地数据库,只需从它断开连接,并使用System.IO命令(如FileStream)复制文件。然后恢复它只是用备份的副本覆盖MDB。 我不相信本地数据库mdb文件有系统/主表等,或者备份/恢复命令将在他们的工作。 –
@Ryan Mann,localDB是MDF,也有标准的备份/恢复命令。但有些部分是正确的,当我们只需要一份MDF(不是备份)时,我们需要停止服务器并且仅仅复制。 –
而'ALTER DATABASE'需要以管理员身份连接到主数据库(集成安全= TRUE)。那么具有权限的异常消息将被解决。 –