如何使用c#将mdf文件复制到一个文件夹中

时间:2015-09-08 06:26:16

标签: c# .net sql-server

我使用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)复制到一个文件夹中。那些答案对我没有帮助

3 个答案:

答案 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正在使用该文件,因为您收到了此类错误

相关问题