sha*_*han 2 c# sql-server restore localdb
我正在尝试为我的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();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行它时,我收到一个错误:
还原db失败System.Data.SqlClient.SqlException(0X80131904):userdoes无权更改数据库BbCon.mdf数据库不存在或者数据库未处于允许访问检查的状态.
有人可以帮我吗?
您是否尝试备份或还原?您在标题中提到备份,而命令用于还原.
localDB的例子并不多.
使用我的代码如下.希望这可以帮助..
备份 -
string master_ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Database=Master;Integrated Security=True;Connect Timeout=30;";
using (SqlConnection masterdbConn = new SqlConnection())
{
masterdbConn.ConnectionString = master_ConnectionString;
masterdbConn.Open();
using (SqlCommand multiuser_rollback_dbcomm = new SqlCommand())
{
multiuser_rollback_dbcomm.Connection = masterdbConn;
multiuser_rollback_dbcomm.CommandText= @"ALTER DATABASE yourdbname SET MULTI_USER WITH ROLLBACK IMMEDIATE";
multiuser_rollback_dbcomm.ExecuteNonQuery();
}
masterdbConn.Close();
}
SqlConnection.ClearAllPools();
using (SqlConnection backupConn = new SqlConnection())
{
backupConn.ConnectionString = yourConnectionString;
backupConn.Open();
using (SqlCommand backupcomm = new SqlCommand())
{
backupcomm.Connection = backupConn;
backupcomm.CommandText= @"BACKUP DATABASE yourdbname TO DISK='c:\yourdbname.bak'";
backupcomm.ExecuteNonQuery();
}
backupConn.Close();
}
Run Code Online (Sandbox Code Playgroud)
对于恢复 -
string master_ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Database=Master;Integrated Security=True;Connect Timeout=30;";
using (SqlConnection restoreConn = new SqlConnection())
{
restoreConn.ConnectionString = master_ConnectionString;
restoreConn.Open();
using (SqlCommand restoredb_executioncomm = new SqlCommand())
{
restoredb_executioncomm.Connection = restoreConn;
restoredb_executioncomm.CommandText = @"RESTORE DATABASE yourdbname FROM DISK='c:\yourdbname.bak'";
restoredb_executioncomm.ExecuteNonQuery();
}
restoreConn.Close();
}
Run Code Online (Sandbox Code Playgroud)
最新情况:
哎呀,对不起,我的代码是针对SQL localDB 2014的,但似乎你正在使用2012.请将(LocalDB)\ MSSQLLocalDB替换为(LocalDB)\ v11.0
亲切地尝试以上改变.
根据我的经验,如果我写了"数据目录",请提供您的信息 在我的connectionString中,我只能读取(SQL SELECT命令)数据库.换句话说,可以完成插入和更新命令,但实际上没有插入或更新数据库而没有任何异常.我认为设置为|数据目录| 将数据库设置为只读,我发现有些人在使用| Data Directory |插入或更新数据库时遇到了困难 设置.
希望你的美好时光!谢谢 !