【问题标题】:SQLite auto increment issueSQLite 自动增量问题
【发布时间】:2012-10-31 12:16:37
【问题描述】:

我在 C# 中创建了一个 SQLite 数据库,并使用该查询创建了一个表。

string q = "create table mains ( id int IDENTITY, desc varchar(20), PRIMARY KEY(id) )"; 
ExecuteQuery(q);

我尝试添加这样的记录:

string txtSQLQuery = "insert into  mains (desc) values ('" + textBox1.Text + "')";
ExecuteQuery(txtSQLQuery);

我刚刚添加了一个 desc 而不是 ID ,我想它应该自动增加 id 字段,但它没有。 相反,每次我添加新记录时,它都会添加 desc 并且 ID 字段为空

编辑: 我尝试使用:

id int PRIMARY KEY AUTOINCREMENT

但出现错误:

SQLite.SQLiteException: near "AUTOINCREMENT":

编辑 2: 当我加载记录时,我明白了:

ID 字段中根本没有数字。

【问题讨论】:

    标签: c# sql database sqlite


    【解决方案1】:

    试试

    create table mains (id INTEGER  PRIMARY KEY, desc varchar(20))
    

    声明为 INTEGER PRIMARY KEY 的列将自动递增。

    Taken from sqlite.org

    SQLFiddle example

    编辑

    作为替代尝试执行

    string txtSQLQuery = "insert into mains (id, desc) values (NULL, '" + textBox1.Text + "')";
    

    【讨论】:

    • 试过了,但请检查我刚刚上传的问题图片
    • 这里还有其他问题。见this working SQLFiddle
    • 是的,它可以工作,必须插入 Null,非常感谢
    • 请记住,您必须使用INTEGER 而不是INT,因为后者根本不会自动递增或填充。
    【解决方案2】:

    IDENTITY 不是 SQLite 语言的一部分。改用 AUTOINCREMENT:

     create table mains ( id int AUTOINCREMENT, desc varchar(20), PRIMARY KEY(id) )
    

     create table mains ( id int PRIMARY KEY AUTOINCREMENT, desc varchar(20))
    

    【讨论】:

    • 它说:SQLite.SQLiteException:靠近“AUTOINCREMENT”:语法错误我猜AUTOINCREMENT 无效?
    • 是的,AUTOINCREMENT 有效:sqlite.org/autoinc.html。您在创建新表之前删除了旧表吗?
    • 使用 INTEGER 代替 int。见sqlfiddle.com/#!7/d0742/2。此外,VARCHAR(20) 对 SQLite 没有意义,但它会正确映射到 TEXT。
    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多