2

私はSQLiteを初めて使用し、次のコードを実行しようとしています。

using (var cn = new SQLiteConnection("Data Source=:memory:;Version=3;")) {
    cn.Open();

    var cmd = cn.CreateCommand();
    cmd.CommandText = "CREATE TABLE [ContentItems] ([Id] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](100) NOT NULL, CONSTRAINT [PK_ContentItems] PRIMARY KEY ([Id]))";
    cmd.ExecuteNonQuery();

    var cmd2 = cn.CreateCommand();
    cmd2.CommandText = "INSERT INTO [ContentItems] (Title) VALUES ('Test 1')";
    cmd2.ExecuteNonQuery();
}

しかし、これはエラーになります:

制約違反により中止ContentItems.IdはNULLではない可能性があります

ドキュメントを確認しましたが、過去のSQLの経験に基づいて、これが機能しない理由がわかりません。助けていただければ幸いです。ありがとう

4

1 に答える 1

5

SQLiteは、AUTOINCREMENTキーワードを使用して、IDENTITY列として考えているものを作成します。この例では、ID列はAUTOINCREMENTで作成されておらず、NOT NULLとして宣言されているため、値を指定する必要があります。

求めているCREATEステートメントは次のとおりです。

 CREATE TABLE [ContentItems] (
    [Id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    [Title] TEXT NOT NULL, 
    CONSTRAINT [PK_ContentItems] PRIMARY KEY ([Id])
 )

SQLiteはTEXTデータ型を使用し(「CHAR」を含むものはすべてそのデータ型にマップしますが)、最大フィールド長を必要としない、または尊重しないことに注意してください。

于 2012-10-08T16:45:37.257 に答える