2012-10-08 58 views
1

我是新来的SQLite和我试图运行下面的代码:SQLite的:INSERT INTO标识列

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(); 
} 

但这给出了错误:

Abort due to constraint violation ContentItems.Id may not be NULL

我有通过文档查看,但基于我过去的SQL经验,我不明白为什么这不起作用。我会很感激的帮助。谢谢

+2

你忘了自动增加位 – EaterOfCode

+1

在SQLite中通常不需要显式自动增量ID列:http://www.sqlite.org/autoinc.html – reinierpost

回答

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”该数据类型),不需要或最大尊重字段长度。

+1

谢谢,这将解释为什么我找不到任何文档IDENTITY。 – nfplee