2015-09-08 5 views
-1

Я использую C#, и у меня есть небольшая база данных SQL Server, которую мне нужно скопировать в папку C:\databases\, имя метода - CreateCopy.Как скопировать файл mdf в папку с C#

Но в 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, потому что мне не нужно делать создать файл безнал, мне нужно архива этой базы данных. Мне нужно просто скопировать эти два файла (.mdf и .ldf) в папку. И что ответы не помогли мне

+1

Возможный дубликат [Копировать файлы SQL Server MDF и LDF во время использования сервера] (http://stackoverflow.com/questions/8681009/copy-sql-server-mdf-and-ldf-files-while-server -использование) – Mate

+1

@Mate не является дубликатом, я объяснил также причину – puti26

+0

Просто взять bkp не обязательно, остановите службу. В этом вопросе объясняется, как остановить и запустить службу ... прочитайте все ответы – Mate

ответ

1

Файлы базы данных .mdf и .ldf-файлы используются механизмом SQL Server.

Если вы используете базу данных DETACH из экземпляра SQL Server, вы можете копировать или перемещать эти файлы.

Но когда вы DETACH db, он будет недоступен!

Так что лучше запустить backup command in SQL, а затем использовать его.

+0

Спасибо, лучше сделать резервную копию, чем риск оставить базу данных неприемлемой! :) – puti26

0

Удалить SqlConnection connection = new SqlConnection(MDF_CONNECTION_STRING); он получит доступ к файлу .mdf и даст его после выполнения File.Copy(). потому что во время исполнения File.Copy() файла используется при SqlConnection это потому, что вы получаете такую ​​ошибку

+0

Проблема в том, что SQLServer запущен и удалить эту строку подключения не помогает – puti26

Смежные вопросы