ここで最初に言うことは、SQLiteには列の設定を変更する構文がないことです。元のテーブルの名前を変更し、必要なスキーマを持つ新しいテーブルを作成し、名前を変更したテーブルから新しいテーブルにコピーする必要があります。
あなたがAUTOINCREMENTのSQLiteでテーブルを作成するときに、あなたのテーブルにAUTOINCREMENTフラグを追加するにはあなたのコードは、今、この
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = yourConnection;
cmd.CommandText = "ALTER TABLE tblName RENAME TO tmp_tblName";
cmd.ExecuteNonQuery();
cmd = new SQLiteCommand(@"
CREATE TABLE tblName
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
AnotherField NVARCHAR(100) NOT NULL)", cnn);
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO tblName (ID, AnotherField) SELECT ID, AnotherField FROM tmp_tblName";
cmd.ExecuteNonQuery();
のようなものではsqlite_sequence
と呼ばれる内部テーブルに新しい行を追加します。あなたはあなたがフィールド配列の値がPRIMARY KEYフィールドに挿入された最大値に等しいことがわかります。このテストコードを実行した場合、このテーブルには、通常のADO.NETクラス
cmd.CommandText = "SELECT seq FROM sqlite_sequence WHERE name = 'tblName'";
int lastInsertedValue = Convert.ToInt32(cmd.ExecuteScalar());
Console.WriteLine(lastInsertedValue);
で読み取ることができます。 これで、テーブルに新しいレコードを挿入しようとすると、AUTOINCREMENTフラグが期待通りに機能し始め、新しいレコードがシーケンスから次の値を受け取ることがわかります。
オートインクリメントの列に明示的な値を挿入することはできます。 –
あなたはそう言っています...私はテーブルの列の自動インクリメントを作成することができ、私は特定のIDを持つデータを挿入することができますか? –
[documentation](http://www.sqlite.org/autoinc.html)は、「INSERTでは、ROWIDまたはINTEGER PRIMARY KEY列に明示的に値が与えられていないと、自動的に未使用の整数... " –