【问题标题】:c# - Auto increment in sqlite stops at number 10c# - sqlite 中的自动增量在数字 10 处停止
【发布时间】:2018-03-29 10:20:11
【问题描述】:

我在 sqlite 数据库中有一个表,其中包含“id”列 当我按下按钮时,我使用此代码自动增加此列

con.Open();
        SQLiteCommand cmd = new SQLiteCommand("Select MAX(id)+1 FROM Data", con);

        object obj = cmd.ExecuteScalar();
        int Amount = (obj != null && obj != DBNull.Value) ? Convert.ToInt32(obj) : 1;

        con.Close();

        tId.Text = Convert.ToString(Amount);

一切正常,直到表中有 10 条记录,然后它拒绝检索 id 号“11”

【问题讨论】:

  • 为什么不将 ID 列定义为具有 AUTOINCREMENT 标志而忘记它?
  • “拒绝”是什么意思?会发生什么?
  • 当有 10 条记录并且我尝试按下按钮时,它会得到已经存在的 ID 号“10”@MichaelButscher
  • 为什么需要下一个id 值?你是用它来插入的吗?如果是这样,那是非常糟糕的设计。正如@Steve 已经提到的,让数据库为您执行此操作。通过使用自动增量,您可以为 id 插入所有值 except,sqllite 将为您在任何新记录上设置。
  • 谢谢两位,我做到了,它成功了,但是另一个函数导致了很多错误,我会尝试改变它。

标签: c# sqlite auto-increment


【解决方案1】:

你可以试试这个更新后的代码:

con.Open();
SQLiteCommand cmd = new SQLiteCommand("Select MAX(cast(id as int))+1 FROM Data", con);

object obj = cmd.ExecuteScalar();
int Amount = (obj != null && obj != DBNull.Value) ? Convert.ToInt32(obj) : 1;

con.Close();

tId.Text = Convert.ToString(Amount);

【讨论】:

  • 这只是您的问题的解决方案,不是好的解决方案!您真的应该将“id”列设置为自动递增并让数据库处理它。如果您需要在其他任何地方使用它作为 varchar,那么您可以轻松地在那个时候将此列转换为 int。
猜你喜欢
  • 2010-09-30
  • 2013-03-06
  • 2017-03-07
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 2015-06-08
  • 1970-01-01
相关资源
最近更新 更多