SQLite:插入标识列[重复]

lzfw57am  于 2023-01-21  发布在  SQLite
关注(0)|答案(1)|浏览(123)
    • 此问题在此处已有答案**:

(9个答案)
6小时前关门了。
我是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经验,我不明白为什么这不起作用。我将感谢帮助。谢谢

yzxexxkh

yzxexxkh1#

SQLite使用AUTOINCREMENT关键字创建IDENTITY列。在您的示例中,ID列不是使用AUTOINCREMENT创建的,因为它被声明为NOT NULL,所以您必须提供一个值。
您要使用的CREATE语句是:

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

请注意,SQLite使用TEXT数据类型(尽管它会将任何包含“CHAR”的内容Map到该数据类型),并且不需要也不考虑最大字段长度。

相关问题