【发布时间】:2019-08-24 22:41:18
【问题描述】:
我正在 c# Visual Studio 2013 中开发一个桌面应用程序,我想在其中创建一个允许用户自行恢复和备份数据库的功能。但问题是部署项目后它不会备份或恢复数据库。
当我尝试备份时,它说!
数据库“DatabaseName”没有退出。请确保输入的名称正确。 BACKUP DATABASE 异常终止。
当我尝试恢复数据库时,它说
System.Data.Sqlclient.SqlException (0x80131904): 用户无权更改数据库.mdf',数据库不退出,或数据库未处于允许访问检查的状态。等等!
我通过将 mdf 文件附加到应用程序来使用 SQL Server Express 2012,当我尝试使用查询进行备份时,当我通过 SQL Server 添加连接字符串时它可以工作,但在附加 mdf 文件后我将无法工作。
看过一些教程视频并想出了一些代码,但我什么也没得到
这是我的备份代码!
private void buttonbackup_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\neyadatabase.mdf;Integrated Security=True;Connect Timeout=30");
con.Open();
String sql = "BACKUP DATABASE neyadatabase TO DISK = '" + backuploca.Text + "\\neyadatabase - " + DateTime.Now.Ticks.ToString() + ".Bak'";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
MessageBox.Show("backup done successfully!");
con.Close();
con.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这是我的恢复代码!
private void buttonrestore_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\neyadatabase.mdf;Integrated Security=True;Connect Timeout=30");
con.Open();
string sqlStmt2 = string.Format("ALTER DATABASE [neyadatabase.mdf] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
SqlCommand bu2 = new SqlCommand(sqlStmt2, con);
bu2.ExecuteNonQuery();
string sqlStmt3 = "USE MASTER RESTORE DATABASE [neyadatabase.mdf] FROM DISK='" + restoreloca.Text + "'WITH REPLACE;";
SqlCommand bu3 = new SqlCommand(sqlStmt3, con);
bu3.ExecuteNonQuery();
string sqlStmt4 = string.Format("ALTER DATABASE [neyadatabase.mdf] SET MULTI_USER");
SqlCommand bu4 = new SqlCommand(sqlStmt4, con);
bu4.ExecuteNonQuery();
MessageBox.Show("database restoration done successefully");
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我是这方面的初学者,如果有人要帮助我,请也举一些例子,以便我更好地理解!
谢谢
【问题讨论】:
标签: c# sql winforms backup restore