O SQLite mantém o banco de dados bloqueado mesmo depois que a conexão é fechada
Estou usando o provedor System.Data.SQLite em um aplicativo ASP.NET (framework 4.0). O problema que estou correndo é que quando eu INSERT algo em uma tabela no banco de dados SQLite, o banco de dados fica bloqueado eo bloqueio não está sendo liberado, mesmo após a conexão é descartada.
Ao tentar acessar o arquivo, o erro é: "O processo não pode acessar o arquivo 'catalog.sqlite' porque está sendo usado por outro processo."
Meu código é bastante simples, abro a conexão, leio alguns dados de um banco de dados SQLServer, insiro esses dados no SQLite (por meio de SQLiteDataAdapter) e depois fecho a conexão e descarte tudo apenas para estar no lado seguro. Mas ainda assim, recebo esse erro quando tento zipar o arquivo depois que ele é preenchido com os dados.
Eu li todos os tipos de sugestões aqui no StackOverflow, mas nenhum deles ajudou a resolver o problema (desligar o antivírus, alterar o modelo de transação, esperar alguns segundos antes de compactar o arquivo, agrupar todas as chamadas de inserção em uma transação, etc .. mas nenhum ajudou a resolver este problema.
Talvez haja algo específico para o ASP.NET (multithreading é o problema? Mesmo que eu esteja testando em uma máquina de desenvolvimento onde há apenas uma chamada para essa função e sem concorrência?)
Como uma nota lateral, eu tentei evitar DataTable e SQLiteDataAdapter e usando apenas SQLiteCommand diretamente e dessa forma ele funciona bem. É claro que posso continuar construindo minhas consultas como strings em vez de usar os adaptadores de dados, mas acho um pouco estranho quando há um framework construído para isso.