如何从C#.Net复制文件

时间:2011-09-20 04:53:45

标签: c# .net vb.net

My C#.Net windows应用程序连接到SQLServer2005数据库并实现数据库备份功能。

在我的申请中,

我尝试执行这样的文件复制:

<!-- language:lang-csharp -->
File.Copy(Application.StartupPath + "\\dbSTK.mdf",  "D:\\dbSTK123.mdf",true);

但它会抛出异常并显示以下消息:

" The Process cannot Access the File, because it is being use by another Process"

如何复制已在使用的db文件?

4 个答案:

答案 0 :(得分:2)

在SqlServer运行时,您无法复制mdf文件。只需临时关闭SqlServer或在复制之前分离该数据库(here)。

答案 1 :(得分:1)

相反,复制实际的MDF,使用SQL Server的内置BACKUP命令备份MDF可能更好。

分离数据库然后复制数据库的建议存在问题,因为它会使数据库脱机。

答案 2 :(得分:0)

服务器拒绝对数据文件的进程访问。一旦打开数据文件,其他进程也无法打开。这就是你的功能失败的原因。

答案 3 :(得分:0)

您应关闭与DB的所有打开连接以访问DB文件。但通常,您不应该触摸数据库文件。您最好使用SQL命令备份数据库。

string backupCommandText = "BACKUP DATABASE [<YOUR_DB_NAME>]" +
   "TO  DISK = N'<BACKUP_PATH>' WITH NOFORMAT, NOINIT, " + 
   "NAME = N'Web-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = backupCommandText ;
cmd.Connection = conn;  
cmd.ExecuteNonQuery();