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

С SQLite.net легко узнать, существует ли столбец, если он вам действительно нужен:

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

Но, как упоминалось ранее, connection.CreateTable<T>() или же connection.CreateTableAsync<T>() добавит новые столбцы для вас, поэтому вам не нужно выполнять SQL-операторы.

Другие вопросы по тегам