如何从C#.Net复制文件

如何从C#.Net复制文件,c#,.net,vb.net,C#,.net,Vb.net,我的C#.Net windows应用程序连接到SQLServer2005数据库并实现数据库备份功能 在我的申请中 我尝试执行如下文件复制: <!-- language:lang-csharp --> File.Copy(Application.StartupPath + "\\dbSTK.mdf", "D:\\dbSTK123.mdf",true); 如何复制已在使用的db文件?服务器拒绝inteprocess访问数据文件。一旦它打开了一个数据文件,任何其他进程都不能打开它。这就

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

在我的申请中

我尝试执行如下文件复制:

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

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

服务器拒绝inteprocess访问数据文件。一旦它打开了一个数据文件,任何其他进程都不能打开它。这就是函数失败的原因。

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

而不是复制实际的MDF,最好使用SqlServer的内置命令备份MDF


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

您应该关闭所有打开的数据库连接以访问数据库文件。但一般来说,您不应该触摸数据库文件。您最好使用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();
string backupCommandText=“备份数据库[]”+
“TO DISK=N'',格式为NOFORMAT,NOINIT,”+
“NAME=N‘网络完整数据库备份’、SKIP、NOREWIND、NOUNLOAD、STATS=10”;
SqlCommand cmd=新的SqlCommand();
cmd.CommandText=备份命令文本;
cmd.Connection=conn;
cmd.ExecuteNonQuery();

如果关闭现有连接并重试,它是否仍在数据库中打开。如果您试图复制的文件仍处于打开状态,则会出现此问题。这并不能真正回答“他如何才能复制已在使用的数据库”的问题,而只是指出其现有代码失败的原因。感谢您的回答,但我得到了以下错误:在sysdatabases中找不到数据库“dbSTK”的条目。找不到具有该名称的条目。确保输入的名称正确。备份数据库正在异常终止。“我已使用默认sqlserver实例(.\SQLEXPRESS)从VisualStudio IDE创建了数据库”
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();