c# - SQLite:插入标识列

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

但这给出了错误:

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

我已经浏览了文档,但根据我过去的 SQL 经验,我不明白为什么这不起作用。我很感激你的帮助。谢谢

最佳答案

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”的任何内容映射到该数据类型)并且不需要或遵守最大字段长度。

关于c# - SQLite:插入标识列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785780/

相关文章:

mysql - 返回带有特定标签的行

python - 要创建的数据库文件的名称在哪里指定?

sql - 如何在 SQLite 中列出特定表的所有可用 View ?

c# - 如何设置包含 *、/、-、% 和 + 等字符的枚举列表

c# - 在 XNA 中读取 spritesheet XML 文件

c# - 快速查找排序列表中的项目索引

c# - 我们可以在单个 asp.net 应用程序中拥有来自 2 个不同数据库的 2 个不同的 Oracle 依赖项吗

mysql - MySQL中按聚合函数max分组

php - 每天统计/计算 mysql 结果

c++ - sqlite select 语句抛出的异常