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

Gk_*_*999 0 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';");
}
Run Code Online (Sandbox Code Playgroud)

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

下次调用AddColumnMyNewColumn方法时,它将引发错误。

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

我已经检查过这个这个了,但是我不能将这些东西放在一起得到这样的东西。

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';");
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*oob 5

解决方案1.使用SQLite.Net

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

如果您将属性添加到C#类中,则只需调用此

SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); 

await conn.CreateTableAsync<MyTableClass>();
Run Code Online (Sandbox Code Playgroud)

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

解决方案2.使用查询

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

SQLite模式信息元数据


xle*_*eon 5

使用 SQLite.net,\xc2\xb4s 很容易知道列是否存在,以防万一你真的需要它:

\n\n
var tableInfo = connection.GetTableInfo("YourTable");\nvar columnExists = tableInfo.Any(x => x.Name.Equals("ColumnName"));\n
Run Code Online (Sandbox Code Playgroud)\n\n

但正如之前提到的,connection.CreateTable<T>()或者connection.CreateTableAsync<T>()会为你添加新列,所以你不需要执行sql语句。

\n