2012-02-19 32 views
0

说明:无法复制数据库备份文件

  • 我想我的SQL数据库复制备份文件,一旦我登录,并重定向到backup.aspx和我点击备份按钮,它提示我的错误输出

  • 如果我直接打开backup.aspx我可以复制数据库中没有任何错误

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

  • 我想问的是反正可以解决这个问题吗?

  • 我的目标是从数据库断开在页面加载,但我不能做它,它仍然提示我同样的错误

错误消息:

该进程无法访问该文件' 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); 
+0

Probabky无法正确关闭连接。请发布您使用的登录控制台,然后释放连接。 – AngeloBad 2012-02-19 11:28:47

+0

很可能在serverfault.com上的人可以更好地回答这个问题...... – 2012-02-19 11:38:19

+0

如果数据库正在由SQL Server管理,那么您不能只复制文件。你应该检查制作一个SQL Server备份(创建一个'.bak'文件并发布它),或者你需要学习如何在复制'.mdf'和'.ldf'之前从SQL Server中分离数据库。文件。 – 2012-02-19 12:36:00

回答

2

,您应该备份数据库,然后再复制* .bak文件备份,这里的一些代码,让你开始,你当然可以改变该查询或文件名生成代码以适合您的需求,请务必查询Backup 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(); 
    } 
}