2010-01-08 5 views
1

내 SQLite 데이터베이스 파일을 사용한 후에 이름을 바꾸려고합니다. 그러나 모든 연결이 닫힌 후에도 파일이 여전히 SQLite에 의해 열리는 것으로 보입니다. 여기 SQLite 데이터베이스 파일을 사용한 후 이름을 바꿀 수 없습니다.

내가 뭘하는지의 예입니다

using (DbConnection conn = new SQLiteConnection("Data Source=test.db")) 
{ 
    conn.Open(); 
    DbCommand command = conn.CreateCommand(); 
    command.CommandText = "select id from test"; 
    command.ExecuteScalar(); 
} 
File.Move("test.db", "test.db.test"); 

Move 호출이 IOException를 throw합니다. 이것이 내가이 데이터베이스 파일에 유일한 연결입니다. 응용 프로그램이 끝나면 수동으로 문제없이 파일을 이동할 수 있습니다. 명시 적으로 시작하고 트랜잭션을 커밋하기 전에 연결 문자열에 Pooling=false을 연결 문자열에 명시 적으로 설정하고 수동으로 Close을 호출하는 등의 다양한 작업을 시도했지만 아무 도움도되지 않습니다. SQLite가 응용 프로그램을 종료하지 않고 데이터베이스 파일을 닫거나 해제하도록 강제하는 방법이 있습니까?

답변

0

SQLite.Net을 사용하고 있습니까? 난 그냥 귀하의 코드를 시도하고 SQLite.Net 1.0.65와 문제없이 작동, 비스타에서 VS 2005.

+0

예, 해당 라이브러리와 해당 버전을 사용하고 있습니다. 나 VS2008을 사용하고 있습니다 (여전히 .NET 2.0을 사용하고 있습니다). 나는 무슨 일이 일어나고 있는지 궁금해? 'test'테이블을 포함하도록 미리 데이터베이스 파일을 만들었습니까? 기존 데이터베이스 파일없이 동일한 코드를 시도하고 ExecuteScalar 호출에 의해 던져진 예외를 단순히 잡았으므로 아무런 문제없이 작업이 진행되었습니다. 비록 데이터베이스 파일이 0 바이트이기 때문에 실제 성취는 아니지만 ... – Dennis

+0

예, "create table test (id integer)"의 ExecuteNonQuery와 동일한 코드를 사용하고 나서 코드를 다시 변경하고 여러 번 실행합니다. 디버그 및 릴리스 모드에서. 이 파일이 코드의 다른 곳에서 사용되거나 외부 도구에 의해 사용될 수 있습니까? – vit

+0

난 그냥 SQLite.NET redownloaded 지금은 아주 잘 작동하고있어, 그건 아주 이상합니다. 이 문제를 직접 해결해 주셔서 감사합니다. – Dennis

0

DBCommandIDisposable입니다. 어쩌면 Dispose을 호출하거나 using 문으로 작성해야 할 수 있습니다.

관련 문제