SQLite.NET检查表中是否存在列

时间:2015-01-28 10:31:33

标签: c# sqlite windows-runtime sqlite.net

我创建了以下方法,在已存在的SQLite表中添加一列

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

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

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

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

我已经打了thisthis,但我不能把这些东西放在一起得到这样的东西..

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';");
}

2 个答案:

答案 0 :(得分:5)

解决方案1.使用SQLite.Net

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

如果您在C#类中添加了一个属性,则可以调用此

SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); 

await conn.CreateTableAsync<MyTableClass>();

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

解决方案2.使用查询

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

SQLite Schema Information Metadata

答案 1 :(得分:3)

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

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

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