2011-09-20 3 views
1

My C# .Net windows 응용 프로그램은 SQLServer2005 데이터베이스에 연결하고 데이터베이스 백업 기능을 구현합니다.C# .Net에서 파일을 복사하는 방법

<!-- 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 파일?

+2

기존 연결을 닫고 시도하면 여전히 데이터베이스에 열려 있습니까? 복사하려는 파일이 아직 열리면 문제가 발생합니다. – Dotnet

답변

0

서버가 데이터 파일에 대한 inteprocess 액세스를 거부합니다. 데이터 파일을 열면 다른 프로세스도 열 수 없습니다. 그것이 당신의 기능이 실패하는 이유입니다.

+2

이것은 '이미 사용중인 db를 어떻게 복사 할 수 있습니까?'라는 질문에 실제로 대답하지 않지만 대신 기존 코드가 실패한 이유를 지적합니다. –

2

SqlServer가 실행되는 동안 mdf 파일을 복사 할 수 없습니다. 복사하기 전에 SqlServer를 일시적으로 종료하거나 데이터베이스 (here)를 분리하십시오.

1

실제로 MDF를 복사하면 SQL 서버의 BACKUP 명령을 사용하여 MDF를 백업하는 것이 좋습니다.

데이터베이스를 분리 한 다음 복사하는 것이 데이터베이스를 오프라인으로 만들기 때문에 문제가됩니다.

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(); 
+0

대답을 주셔서 감사합니다 하지만 다음과 같은 오류가 발생했습니다 : "dbSTK '데이터베이스의 sysdatabases 항목을 찾을 수 없습니다. 해당 이름의 항목을 찾을 수 없습니다. 올바르게 입력했는지 확인하십시오 BACKUP DATABASE가 비정상적으로 종료되고 있습니다. " 기본 sqlserver 인스턴스 (. \ SQLEXPRESS)를 사용하여 VisualStudio IDE에서 데이터베이스를 만들었습니다. –

관련 문제