再次是我,那个使用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/

10-12 23:50