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 回答