再次是我,那个使用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 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。表中的所有其他行;如果表为空,则为1。
确保您的INSERT
语句不包含列NULL
的显式值(ID
除外),否则该列将不会自动递增。如果这在SQLite-net中是不可能的(您可能在这里需要调试器),则可能是一个错误。尽管令人惊讶的是没有其他人遇到过这种情况。
也许您需要使属性ID
可为空(即,使用类型int?
;是的,带有问号)。请注意,我只是在这里猜测;您可能需要尝试一下。
关于primary-key - 使用SQLite数据库创建时AutoIncrement附近的语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24600375/