Я написал простое приложение (назовите его app1), которое читает базу данных SQLite и отображает содержимое в виде таблицы.У меня есть отдельное консольное приложение C # (app2), которое необходимо записать в ту же базу данных.Проблема в том, что app2 завершается с ошибкой «база данных заблокирована».Я вижу, как только я запускаю app1, создается файл userdb-journal.Я предполагаю, что проблема в том, что app1 открывает базу данных, но не освобождает ее?Это код, который у меня есть для заполнения таблицы, которую я связываю с сеткой в приложении 1.
public DataTable GetAllPeople()
{
var connectionString = "Data Source=" + dbPath + ";Version=3";
using (SQLiteDataAdapter sqlDataAdapter =
new SQLiteDataAdapter("SELECT id,FirstName,LastName,Address FROM Users",
connectionString))
{
using (DataTable dataTable = new DataTable())
{
sqlDataAdapter.Fill(dataTable);
// code to add some new columns here
return dataTable;
}
}
}
Вот код, который заполняет сетку:
private void Form1_Load(object sender, EventArgs e)
{
UserDatabase db = new UserDatabase();
db.Initialize();
dataGridView1.DataSource = db.GetAllPeople();
}
Как мне исправить вещитак app2 может читать и записывать в базу данных, пока app1 работает?
EDIT Похоже, этот файл журнала создается только app2.Я заметил только ошибку блокировки базы данных, когда приложение app1 также работало, но, возможно, app1 - красная сельдь.Приложение 2 является многопоточным.Возможно, мне следует начать новый вопрос, посвященный app2 и многопоточному доступу?
EDIT Спасибо за все комментарии.Я установил блокировку всех обращений к БД и завернул все в использования.Кажется, теперь все работает.