Проверка существования таблицы с сохранением открытого соединения в SQLite

Итак, у меня есть метод, который должен проверить, существует ли таблица в базе данных, которая определяется следующим образом:

internal override bool TableExists(string tableName)
{
    bool tableExists = false;

    // Check the Tables schema and see if the table exists
    using (SQLiteConnection conn = (SQLiteConnection) CreateConnection())
    {
        conn.Open();
        DataRow[] rows = conn.GetSchema("Tables").Select(string.Format("Table_Name = '{0}'", tableName));
        tableExists = (rows.Length > 0);
    }

    // Actually called elsewhere in the code, just here for testing.
    File.Delete(DatabaseEnvironmentInfo.GetPrimaryDataFile(DatabaseName));

    return tableExists;
}

CreateConnection() просто создает новое соединение со строкой соединения, поэтому я не думаю, что проблема есть. Если у меня есть удалить строку conn.GetSchema("Tables")... и я могу удалить файл базы данных, но если я добавлю эту строку обратно, я получаю следующее исключение при попытке удалить после using:

System.IO.IOException: процесс не может получить доступ к файлу 'C:\db.sqlite', поскольку он используется другим процессом.

Делать DataRowобъекты поддерживают связь с базой данных или кто-нибудь знает, в чем проблема? Если есть лучший способ проверить, существует ли таблица в SQLite, я также открыт для этого.

Спасибо!

3 ответа

Решение

Итак, я выяснил проблему, поэтому я опубликую ее здесь на случай, если кто-нибудь столкнется с той же проблемой. В основном у меня был включен пул соединений, поэтому соединения поддерживали открытое соединение с базой данных, и именно поэтому я увидел исключение. Просто добавьте следующее после using:

SQLiteConnection.ClearAllPools();

У меня была похожая проблема без использования пула соединений. Я обнаружил, что проблема была вызвана отсутствием утилизации SQLiteCommands в TableAdapters.

Вы можете найти дополнительные детали здесь.

Если вы добавите conn.Close() в конце вашего использования, вы можете удалить свою базу данных?

Другие вопросы по тегам