파일을 삭제하기 전에 데이터베이스를 닫는 데 문제가 있습니다. 코드는
myconnection.Close();
File.Delete(filename);
그리고 Delete는 파일이 아직 사용 중이라는 예외를 발생시킵니다. 몇 분 후에 디버거에서 Delete ()를 다시 시도 했으므로 타이밍 문제가 아닙니다.
트랜잭션 코드가 있지만 Close () 호출 전에 전혀 실행되지 않습니다. 그래서 나는 그것이 공개 거래가 아니라고 확신합니다. 열기와 닫기 사이의 SQL 명령은 선택 사항입니다.
ProcMon은 데이터베이스 파일을보고있는 프로그램과 바이러스 백신을 보여줍니다. close () 후에 db 파일을 해제하는 프로그램이 표시되지 않습니다.
Visual Studio 2010, C #, System.Data.SQLite 버전 1.0.77.0, Win7
이와 같은 2 년 된 버그를 보았지만 변경 로그에 수정되었다고 표시됩니다.
내가 확인할 수있는 다른 것이 있습니까? 열려있는 명령 또는 트랜잭션 목록을 얻는 방법이 있습니까?
새로운 작동 코드 :
db.Close();
GC.Collect(); // yes, really release the db
bool worked = false;
int tries = 1;
while ((tries < 4) && (!worked))
{
try
{
Thread.Sleep(tries * 100);
File.Delete(filename);
worked = true;
}
catch (IOException e) // delete only throws this on locking
{
tries++;
}
}
if (!worked)
throw new IOException("Unable to close file" + filename);