又是我,用SQLite-net工作的家伙。当我在表的主键上没有自动增量时,我的代码工作了。我想要自动增加键,所以我像这样重建表:
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没有它。
我可能错过了一些愚蠢的东西
你的代码没有什么愚蠢的;与https://github.com/praeclarum/sqlite-net上的代码样本匹配。但是,考虑到这个类似的问题,显然代码示例是错误的:
Android表创建失败(附近"autoincrement":语法错误)?
通过删除自动增量解决了问题。或者引用http://www.sqlite.org/faq.html#q1:
简短的回答:声明为INTEGER PRIMARY KEY的列将自动递增。
(请在创建表后再次检查列ID
是否实际上具有INTEGER PRIMARY KEY
类型)
长一点的回答:如果你声明一个表的列是INTEGER PRIMARY KEY,那么当你在这个表的列中插入一个NULL时,NULL会自动转换成一个整数,这个整数比该列在表中所有行的最大值大1,如果这个表是空的,则为1。
确保您的INSERT
语句不包含列ID
的显式值(NULL
除外),否则该列将不会自动增加。如果这在SQLite-net中是不可能的(您可能需要一个调试器),那么这很可能是一个bug。虽然令人惊讶的是没有人遇到过这种情况。
也许你需要使属性ID
为空(即使用类型int?
;是的,带问号)。请注意,这里我只是猜测;您可能需要进行一些试验。
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
。它将自动为该属性插入增量值。
我是sqlite-net (https://github.com/praeclarum/sqlite-net)的新手,并且在自动增量PK方面遇到了问题。
虽然我用INTEGER PRIMARY KEY或INTEGER PRIMARY KEY AUTOINCREMENT创建了表,但我在插入时遇到了异常,因为PK在第一行设置为0,然后我遇到了异常,因为它试图插入相同的值,所以自动增量不起作用。我所做的是编辑DataAccess.cs和在表类我已经取代了[PrimaryKey]公共Int64 id {get;设置;} for [PrimaryKey] [AutoIncrement] public Int32 id {get;设置;}。我不知道为什么它使用bigint (Int64)而不是Int32,因为我在表创建中指定了INTEGER,但现在它工作正常。我可以通过LINQ添加一个新项,并且自动增量id(表的主键)在每行中自动增加。