SQLite:插入标识列

时间:2012-10-08 16:36:53

标签: c# sql sqlite

我是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经验,我无法理解为什么这不起作用。我很感激你的帮助。感谢

1 个答案:

答案 0 :(得分: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”的任何内容映射到该数据类型),并且不需要或不考虑最大字段长度。