SQLite hält die Datenbank auch nach dem Schließen der Verbindung gesperrt

Ich verwende den System.Data.SQLite-Anbieter in einer ASP.NET-Anwendung (Framework 4.0). Das Problem, auf das ich stoße, ist, dass, wenn ich etwas in eine Tabelle in der SQLite-Datenbank einfüge, die Datenbank gesperrt wird und die Sperre nicht aufgehoben wird, selbst nachdem die Verbindung getrennt wurde.

Beim Versuch, auf die Datei zuzugreifen, lautet der Fehler: "Der Prozess kann nicht auf die Datei 'catalog.sqlite' zugreifen, da sie von einem anderen Prozess verwendet wird."

Mein Code ist ziemlich einfach, ich öffne die Verbindung, lese einige Daten aus einer SQLServer-Datenbank, füge diese Daten in SQLite ein (über SQLiteDataAdapter) und schließe dann die Verbindung und entsorge alles, um auf der sicheren Seite zu sein. Trotzdem erhalte ich die Fehlermeldung, wenn ich versuche, die Datei zu komprimieren, nachdem sie mit den Daten gefüllt wurde.

Ich habe hier auf StackOverflow alle möglichen Vorschläge gelesen, aber keiner von ihnen hat zur Lösung des Problems beigetragen (Deaktivieren des Virenschutzes, Ändern des Transaktionsmodells, Warten einiger Sekunden, bevor die Datei gezippt wird, Einfügen aller Aufrufe in eine Transaktion, etc .. aber keiner hat geholfen, dieses Problem zu lösen.

Möglicherweise hat ASP.NET etwas Spezielles (Multithreading ist das Problem? Obwohl ich es auf einem Entwicklungscomputer teste, auf dem diese Funktion nur einmal aufgerufen wird und keine Parallelität besteht?)

Als Randnotiz habe ich versucht, DataTable und SQLiteDataAdapter zu vermeiden und nur SQLiteCommand direkt zu verwenden, und auf diese Weise funktioniert es wie ein Zauber. Natürlich kann ich meine Abfragen weiterhin als Zeichenfolgen erstellen, anstatt die Datenadapter zu verwenden, aber ich finde es ein bisschen umständlich, wenn ein Framework dafür erstellt wurde.

Antworten auf die Frage(11)

Ihre Antwort auf die Frage