Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将数据库复制为备份文件_C#_Asp.net - Fatal编程技术网

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

C# 无法将数据库复制为备份文件,c#,asp.net,C#,Asp.net,说明: 我试图将我的sql数据库复制为备份文件,一旦我登录并重定向到backup.aspx,我单击了备份按钮,它会提示我一个错误输出 如果我直接打开backup.aspx,我可以复制数据库而不会出现任何错误 我知道问题是我的数据库在我登录后是连接的,所以它告诉我它正被另一个进程使用 我想问的是,无论如何,这个问题能解决吗 我的目标是在页面加载时断开与数据库的连接,但我无法做到,它仍然提示我相同的错误 错误消息: 进程无法访问文件“C:\Users\Roy\Desktop\backup” fy

说明:

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

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

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

  • 我想问的是,无论如何,这个问题能解决吗

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

错误消息:

进程无法访问文件“C:\Users\Roy\Desktop\backup” fyp\10-18-2011\WebSite5\App\u 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);

您应该首先备份数据库,然后复制*.bak文件作为备份,这里有一些代码可以帮助您开始,当然您可以根据需要更改查询或文件名生成代码,请务必查看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();
  }
}

可能您无法正确关闭连接。请在您使用的位置发布登录密码,然后释放连接。可能serverfault.com上的人可以更好地回答此问题…如果数据库由SQL Server管理,您不能只复制文件。您应该检查SQL Server备份(创建一个
.bak
文件并将其发送),或者在复制
.mdf
.ldf
文件之前,您需要了解如何从SQL Server分离数据库。