我创建了以下方法,在已存在的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方法时,会抛出错误。
如何检查此列是否已创建?
我已经打了this和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';");
}
答案 0 :(得分:5)
解决方案1.使用SQLite.Net
您正在使用SQLite.Net,因此您的表映射到C#类,对吧?
如果您在C#类中添加了一个属性,则可以调用此
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
await conn.CreateTableAsync<MyTableClass>();
并且您的新属性将作为列添加到您的表中,所有以前的数据都不会更改
解决方案2.使用查询
(列出表格的所有列),然后您可以手动添加列
答案 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语句。