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 に答える