Проверка существования таблицы с сохранением открытого соединения в SQLite - PullRequest
0 голосов
/ 13 мая 2011

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

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', поскольку он используется другим процессом.

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 14 мая 2011

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

SQLiteConnection.ClearAllPools();
0 голосов
/ 01 октября 2012

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

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

0 голосов
/ 13 мая 2011

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

...