【问题标题】:SQLite auto increment starts with 0 and then the process is terminatedSQLite 自动递增从 0 开始,然后进程终止
【发布时间】:2016-01-03 11:32:15
【问题描述】:

我正在尝试在 WinForms 中使用 SQLite。所以我创建了一个名为Artist 的表,它有两个名为ArtistIdName 的列。 ArtistId 的属性是:INTEGERPRIMARYAUTOINCREMENT

在foreach循环中,如果我手动给值,是没有问题的。

    LtoSQLiteDataContext oc = new LtoSQLiteDataContext();
    int i = 1;
    foreach (var pdfs in articles)
    {
       var r = new PdfReader(pdfs);
       var title = r.Info["Title"].Trim();
       var m = new Artist
       {
                ArtistId = i,
                Name = title
        };
            oc.Artists.InsertOnSubmit(m);
            oc.SubmitChanges();
     i++;
     }

但是如果我像//ArtistId = i; 一样忽略ArtistId,在第一条记录中,ArtistId 得到0 并终止进程。这是屏幕截图:

我知道在 MySQL 和 MsSQL 中,永远不会写入自动增量字段的值。因为它在序列中获取数字。 我不知道,自动增量属性如何正常工作。

【问题讨论】:

  • 阅读documentation。并展示实际的建表语句。
  • 我从头到尾读了一遍,但是看不懂。我的母语不是英语,可能是起源于此。也许真的很困惑。

标签: c# winforms sqlite devart


【解决方案1】:

确保为 ArtistId 属性生成的代码如下所示(打开 *.Designer.cs 文件):

[Column(Name = @"ArtistId ", Storage = "_ArtistId", CanBeNull = false, DbType = "INTEGER NOT NULL", IsDbGenerated = true, IsPrimaryKey = true)]
   public long ArtistId 
   {...}

如果没有,请打开您的 LinqConnect 模型并更改 ArtistId 属性(通过双击打开 ArtistId 属性的属性):

  • 设置实体键 = True
  • 设置自动生成值 = True
  • 保存模型。

如果这没有帮助,请contact us 提供测试项目(包括LinqConnect 模型和测试数据库文件),以便我们能够更清楚地调查您的场景并在最短的时间内为您找到解决方案。

【讨论】:

  • 我很抱歉迟到了谢谢。我刚刚处理了这个问题。非常感谢。
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2013-10-27
  • 2016-01-01
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多