2012-02-08 8 views
1

배경 :스레드 안전한 SQL CE 데이터베이스에 액세스하는 방법

내 Windows 전화 프로젝트. 로컬 SQL CE 데이터베이스를 사용하여 날짜를 저장합니다. 프로그래밍 방식으로 LINQ to SQL을 사용하여 데이터베이스 테이블을 만듭니다.

이 데이터베이스는 여러 스레드의 다양한 datacontext 인스턴스를 통해 액세스됩니다.

나는 모든 데이터를 삭제하고 로그 아웃하는 내 응용 프로그램의 사용자에게 옵션을 제공합니다 :

는 여기에 문제가 있습니다. 사용자가 이것을 선택하면 datacontext의 DeleteDatabase 메서드를 사용하여 데이터베이스를 삭제합니다. 그러나 나는 항상 데이터베이스가 다른 프로세스에 의해 사용되고 있다는 오류 메시지를받습니다. 따라서 삭제할 수 없습니다.

올바른 방향으로 움직이면 내 하루가됩니다.

+1

DB 삭제를 호출하면 연결이 아직 남아 있습니까? DB에 액세스 할 수있는 프로세스가 가장 좋아합니다. –

+0

그럼 내가 열 수있는 모든 연결을 닫았습니다. 데이터베이스를 사용하는 프로세스를 가져 와서 죽일 수있는 방법이 있습니까? – andy

+4

DataContext의 모든 인스턴스를 문장 및/또는 Dispose를 사용하여 래핑합니까? – ErikEJ

답변

3

Andy 위에서 언급했듯이 (솔직히 그들이 나를 때리면) 문제는 다른 프로세스가 여전히 연결을 열었을 때 데이터베이스에 액세스하는 것이 었습니다. 기본적으로 그것은 쉽게 당신이 그렇게처럼 사용하여 블록의 내부 데이터베이스에 대해 실행 코드를 배치하여 고정 할 수 있습니다

using (MyDataContext db = new MyDataContext("isostore:/MyData.sdf")) 
{ 
    //Run database logic here 
} 

나는이 오류에 대한 완벽한 이해를하게하는 의미에서 생각한다. WP7의 열린 파일에서도 똑같은 일이 발생합니다.

자세한 내용 및 예를 보려면 page을 확인하십시오.

+0

안녕하세요 저는이 방법을 시도해 봤지만 제가 블록을 사방에 사용했지만 여전히 데이터베이스를 삭제하려고 할 때 오류가 발생했습니다. –

관련 문제