再一次,我是那个使用SQLite-net的人。当我在表的主键上没有AutoIncrement时,我的代码工作正常。我想自动增加键,所以我重建了这样的表:
using SQLite;
namespace VehicleTracks.Models
{
public class vehicles
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string VehID { get; set; }
public string VehYear { get; set; }
public string VehMake { get; set; }
public string VehModel { get; set; }
public string VehColor { get; set; }
public string EngineID { get; set; }
public System.DateTime PurchaseDate { get; set; }
public string SellerName { get; set; }
public string SellerStreet { get; set; }
public string SellerCityStateZip { get; set; }
public string VehOptions { get; set; }
public string OdomInitial { get; set; }
public string VehBodyStyle { get; set; }
public float PurchaseCost { get; set; }
public byte[] VehPhoto { get; set; }
public string VehType { get; set; }
public string Sold { get; set; }
}
}
现在,当尝试创建表时,我得到" AutoIncrement"附近的语法错误。我尝试不使用AutoIncrement,如果没有它,它似乎没有增加ID。
我可能错过了一些愚蠢的东西。
答案 0 :(得分:4)
你的代码没什么愚蠢的;匹配https://github.com/praeclarum/sqlite-net上的代码示例。但显然代码示例是错误的,考虑到这个类似的问题:
Android table creation Failure (near "autoincrement": syntax error)?
通过删除AutoIncrement解决了该问题。或引用http://www.sqlite.org/faq.html#q1:
简答:声明为INTEGER PRIMARY KEY的列会自动增量。
(请在创建表格后仔细检查列ID
是否确实具有类型INTEGER PRIMARY KEY
。)
更长的答案:如果将一个表的列声明为INTEGER PRIMARY KEY,那么无论何时在表的该列中插入NULL,NULL都会自动转换为一个大于最大值的整数。该列中所有其他行的列,如果表为空,则为1。
确保INSERT
语句不包含列NULL
的显式值(ID
除外),否则该列不会自动递增。如果在SQLite-net中不可能(这里你可能需要一个调试器),那么这可能是一个bug。虽然没有其他人遇到这种情况会令人感到意外。
也许您需要使属性ID
可以为空(即使用类型int?
;是的,使用问号)。请注意,我只是在这里猜测;你可能需要试验一下。
答案 1 :(得分:0)
sqlite> CREATE TABLE app (a INTEGER PRIMARY KEY NOT NULL, B VARCHAR);
sqlite> insert into app (b) values ('');
sqlite> insert into app (b) values ('a');
sqlite>
sqlite> insert into app (b) values ('b');
sqlite> insert into app (b) values ('c');
sqlite> insert into app (b) values ('d');
sqlite> select * from app;
1|
2|a
3|b
4|c
5|d
sqlite> exit;
注意:建议不要使用IN SQLite AUTOINCREMENT
关键字。您需要使用INTEGER PRIMARY KEY NOT NULL
。它将自动插入此属性的递增值。
答案 2 :(得分:0)
我是sqlite-net(https://github.com/praeclarum/sqlite-net)的新手,并且遇到了自动增量PK的问题。
虽然我使用INTEGER PRIMARY KEY或INTEGER PRIMARY KEY AUTOINCREMENT创建了表,但我在插入时遇到了异常,因为PK在第一行中设置为0然后我得到了异常,因为它试图插入相同的值,所以自动增量不起作用。我所做的是编辑DataAccess.cs,在表类中我已经替换了[PrimaryKey] public Int64 id {get;组; for [PrimaryKey] [AutoIncrement] public Int32 id {get;组; }。我不知道为什么它使用bigint(Int64)而不是Int32,因为我在表创建中指定了INTEGER,但现在它工作正常。我可以通过LINQ添加一个新项目,自动增量id(表的主键)在每一行自动递增。