无法将数据库复制为备份文件

时间:2012-02-19 10:52:14

标签: c# asp.net

说明

  • 我正在尝试将我的sql数据库复制为备份文件,一旦我登录,并重定向到backup.aspx我点击备份按钮,它会提示我输出错误

  • 如果我直接打开backup.aspx我可以复制数据库而不会出现任何错误

  • 我知道问题是我登录后我的数据库是连接的,所以它告诉我它正在被另一个进程使用

  • 我想问的是,无论如何都可以解决这个问题?

  • 我的目标是在页面加载时断开与db的连接,但我无法做到,它仍然提示我同样的错误

错误讯息:

  

进程无法访问文件'C:\ Users \ Roy \ Desktop \ backup   fyp \ 10-18-2011 \ WebSite5 \ App_Data \ Database.mdf'因为它正在   被另一个过程使用。

按钮点击代码:

    string time1 = DateTime.Now.ToString("dd-MM-yyyy hh-mmtt");
    Directory.CreateDirectory(@"C:/SME-Online/" + time1);
    string destination = @"C:/SME-Online/" + time1;
    string source = Server.MapPath(@"~/App_Data");
    File.Copy(Path.Combine(source, "Database.mdf"), Path.Combine(destination, "Database.mdf"), true);
    File.Copy(Path.Combine(source, "Database_log.LDF"), Path.Combine(destination, "Database_log.LDF"), true);

1 个答案:

答案 0 :(得分:2)

您应首先备份数据库,然后将* .bak文件复制为备份,这里有一些代码可以帮助您入门,当然您可以更改该查询或文件名生成代码以满足您的需求,请务必检查{{ 3}} T-SQL语句帮助。

public void BackupDatabase()
{
  /// this method should get opened connection
  SqlConnection conn = GetOpenedDBConnectionFromSomewhere();
  string dbName = conn.Database;
  string backupFName = "c:\\MSSQLData\\Backup\\" + dbName + "_" + DateTime.Now.Ticks.ToString() + ".bak";

  string sql = "BACKUP DATABASE [" + conn.Database + "] TO DISK = '" + backupFName + "'" +
               "WITH NOFORMAT, INIT,  NAME = 'Backup of DB:" + dbName + "', SKIP, NOREWIND, NOUNLOAD,  STATS = 10;";

  using (SqlCommand cmd = new SqlCommand(sql, conn))
  {
    cmd.ExecuteNonQuery();
  }
}