SQLite.NET Проверьте, существует ли столбец в таблице
Я создал следующий метод, который добавляет столбец в уже существующую таблицу SQLite
public async void AddColumnMyNewColumn()
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
await conn.ExecuteAsync("ALTER TABLE MyTable ADD COLUMN MyNewColumn bit DEFAULT 'False';");
}
Это создает новый столбец MyNewColumn в MyTable.
В следующий раз, когда вызывается метод 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';");
}
2 ответа
Решение 1. Использование SQLite.Net
Вы используете SQLite.Net, поэтому ваши таблицы сопоставлены с классами C#, верно?
И если вы добавите свойство в свой класс C#, вы можете просто назвать это
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
await conn.CreateTableAsync<MyTableClass>();
и ваше новое свойство будет добавлено в виде столбца в таблицу, все предыдущие данные не будут изменены
Решение 2. Использование запроса
(чтобы перечислить все столбцы таблицы), а затем вы можете добавить свой столбец вручную)
С SQLite.net легко узнать, существует ли столбец, если он вам действительно нужен:
var tableInfo = connection.GetTableInfo("YourTable");
var tableExists = tableInfo.Any(x => x.Name.Equals("ColumnName"));
Но, как упоминалось ранее, connection.CreateTable<T>()
или же connection.CreateTableAsync<T>()
добавит новые столбцы для вас, поэтому вам не нужно выполнять SQL-операторы.