0

我创建了以下在现有 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 方法时,它会引发错误。

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

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

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

2 回答 2

5

解决方案 1. 使用 SQLite.Net

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

如果你向你的 C# 类添加一个属性,你可以调用它

SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); 

await conn.CreateTableAsync<MyTableClass>();

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

解决方案 2. 使用查询

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

SQLite 模式信息元数据

于 2015-01-28T14:49:16.497 回答
4

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

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

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

于 2016-06-23T09:24:01.553 回答