我使用c#并且我有一个小型SQL Server数据库,我需要将其复制到文件夹C:\databases\
中,方法名称为CreateCopy
。
但是在File.Copy行出现错误:
"The Process cannot Access the File, because it is being use by another Process"
我读到File.Copy只能在关闭SqlServer后关闭或分离该数据库,创建副本并再次打开SqlServer。但是如何通过代码来实现呢?
这是我尝试使用的方法:
public static void CreateCopy()
{
try
{
DateTime date = DateTime.Now;
SqlConnection connection = new SqlConnection(MDF_CONNECTION_STRING);
String dbpath = String.Format(@"C:\databases\{0:yyyyMMdd}.mdf", Cash, date);
File.Copy(@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\database.mdf", dbpath);
String lgpath = String.Format(@"C:\databases\{0:yyyyMMdd}_log.ldf", Cash, date);
File.Copy(@"C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_log.ldf", lgpath);
}
catch(Exception e)
{
throw new ApplicationException("Error", e);
}
}
提前致谢!
INFO 这不是here的重复,因为我不需要创建一个bak文件,我需要归档这个数据库。我只需要将这两个文件(.mdf和.ldf)复制到一个文件夹中。那些答案对我没有帮助
答案 0 :(得分:2)
我的理解是您正在寻找可以帮助您Programmatically Enumerating, Attaching, and Detaching SQL Server Databases的代码,以便您可以将MDF文件复制到该位置。您还可以查看How to Backup and Restore以了解AttachDbFilename模式。
答案 1 :(得分:1)
数据库文件.mdf和.ldf文件由SQL Server引擎使用。
如果从SQL Server实例中删除数据库,则可以复制或移动这些文件。
但是当您使用DETACH db时,它将无法访问!
所以最好运行backup command in SQL然后再使用它。
答案 2 :(得分:0)
删除SqlConnection connection = new SqlConnection(MDF_CONNECTION_STRING);
它将访问.mdf
文件,并在File.Copy()
执行后提供。因为在执行File.Copy()
时,SqlConnection
正在使用该文件,因为您收到了此类错误