【发布时间】:2017-02-17 21:17:28
【问题描述】:
我正在尝试为我的 Windows 表单应用程序创建备份和恢复功能。
所以,我尝试进行数据库还原。我的代码是这样的:
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 数据库不存在或数据库未处于允许访问检查的状态。
谁能帮帮我?
【问题讨论】:
-
这是一个本地数据库,只需断开与它的连接并使用 System.IO 命令(如 FileStream)复制文件。然后要恢复它,只需用备份的副本覆盖 MDB。我不相信本地 db mdb 文件有系统/主表等,或者备份/恢复命令对它们有效。
-
@Ryan Mann,localDB 是 MDF,也有标准的备份/恢复命令。但是有些部分是正确的,当我们只需要一份 MDF 的副本(而不是备份)时,我们需要停止服务器并只复制..
-
并且“ALTER DATABASE”需要以管理员身份连接到主数据库(Integrated Security=True)。那么有权限的异常信息就解决了。
标签: c# sql-server restore localdb