2013-03-13 5 views
0

Я использую SQLite (через обертку .NET System.Data.SQLite) как db моего приложения в течение длительного времени, и все было в порядке. Недавно я начал получать «База данных заблокирована». Мой DAL имеет несколько функций, каждый из которых читает и записывает и использует вновь созданное соединение в блоке using. Когда я запускаю свои тесты, ошибка возникает на секундах вызов одной из этих функций. Но когда я отлаживаю и перемещаю строку за строкой, все в порядке. Мое приложение однопоточное.
У кого-то есть идея?
Большое спасибо.Странное поведение SQLite - иногда база данных заблокирована, но иногда нет

ответ

0

Кажется, что многие люди столкнулись с этой проблемой и не смогли ее решить, поэтому я напишу решение. В System.Data.SQLite, начиная с версии 1.0.45.0, закрытие соединения не автоматически закрывает любые связанные объекты DbCommand или DbDataReader. Они должны быть закрыты явно. Поэтому соединение действительно не закрыто, чтобы эти объекты работали, но просто поставлены в очередь для закрытия после того, как все связанные объекты будут удалены. См. this.
В предыдущих версиях он вел себя так, как ожидалось, закрывая соединение, фактически закрывает его!
Решение: Утилизируйте все DbCommand и DbDataReader Явно, когда вы закончите с ними, как и вы с DbConnection.

0

Запускаете ли вы консоль SQLite или SqliteAnalylitics exes в одно и то же время?

+0

нет, работает тест MSTest. Используя его в .NET с библиотекой 'System.Data.SQLite'. – RoadBump

Смежные вопросы