SQLite.NET 检查列是否存在于 table

SQLite.NET Check if column exists in table

我创建了以下方法,在现有的 SQLite 中添加一列 table

public async void AddColumnMyNewColumn()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
    await conn.ExecuteAsync("ALTER TABLE MyTable ADD COLUMN MyNewColumn bit DEFAULT 'False';");
}

它在 MyTable 中创建了一个新列 MyNewColumn。

下次调用 AddColumnMyNewColumn 方法时,它会抛出错误。

如何查看此列是否已创建??

我已经检查过 this,and this,但我无法将这些东西放在一起得到这样的东西..

public async void AddColumnMyNewColumn()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
    bool columnExists;

    //Check if column exists & set columnExists accordingly

    if(!columnExists)
        await conn.ExecuteAsync("ALTER TABLE MyTable ADD COLUMN MyNewColumn bit DEFAULT 'False';");
}

解决方案 1. 使用 SQLite.Net

您正在使用 SQLite.Net,因此您的 Table 已映射到 C# Class,对吧?

如果你添加一个 属性 到你的 C# Class 你可以调用这个

SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); 

await conn.CreateTableAsync<MyTableClass>();

并且您的新 属性 将作为一列添加到您的 Table,所有以前的数据都不会更改

解决方案 2. 使用查询

(列出 table 的所有列)然后您可以手动添加您的列)

SQLite Schema Information Metadata

使用 SQLite.net 可以很容易地知道列是否存在,以防您确实需要它:

var tableInfo = connection.GetTableInfo("YourTable");
var columnExists = tableInfo.Any(x => x.Name.Equals("ColumnName"));

但如前所述,connection.CreateTable<T>()connection.CreateTableAsync<T>() 将为您添加新列,因此您无需执行 sql 语句。