检查表是否存在,以保持连接在SQLite中打开

本文关键字:SQLite 连接 存在 是否 检查表 | 更新日期: 2023-09-27 17:56:35

所以我有一个方法,应该检查数据库中是否存在表,定义如下:

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中是否存在表,我也对此持开放态度。

谢谢!

检查表是否存在,以保持连接在SQLite中打开

好的,我已经解决了这个问题,所以我会在这里发布它,以防有人遇到同样的问题。基本上我启用了连接池,因此连接与数据库保持打开的连接,这就是我看到异常的原因。只需在using后添加以下内容:

SQLiteConnection.ClearAllPools();

如果添加 conn。关闭() 在使用结束时,您可以删除数据库吗?

我在不使用连接池的情况下遇到了类似的问题。我发现问题是由表适配器中缺少SQLiteCommand处置引起的。

您可以在此处找到更多详细信息。