【问题标题】:On INSERT how do I retrieve ROWID or the AUTOINCREMENT value? [duplicate]在 INSERT 上,如何检索 ROWID 或 AUTOINCREMENT 值? [复制]
【发布时间】:2018-06-21 09:48:09
【问题描述】:

我正在使用 SQLite 编写 INSERT,或者我正在使用 AUTOINCREMENT,或者只是使用 ROWID 作为主键。执行 INSERT 后,如何找出我刚刚插入的行的主键是什么?

如果我在 Sql Server 中工作,我知道该怎么做,但这是 SQLite。

这是我的代码:

public bool AddPlanet(Planet p)
{
    bool result = false;
    SQLiteConnection sqlConnection;
    using (sqlConnection = new SQLiteConnection(ConnString))
    {
        sqlConnection.Open();
        sqlCommand = new SQLiteCommand(sqlConnection);
        sqlCommand.CommandText =
            String.Format(
                "insert into planet (name, satellites) values ('{0}',{1})"
                , p.Name
                , p.Satellites.ToString()
                );
        sqlCommand.CommandType = CommandType.Text;
        int x = sqlCommand.ExecuteNonQuery();
        // WHAT DO I DO HERE TO FIND OUT THE ROWID OF
        // THE ROW THAT WAS JUST INSERTED?
        if (x > 0) result = true;
        sqlConnection.Close();
    }
    return result;
}  

【问题讨论】:

  • 尝试运行另一个查询,但使用 SELECT LAST_INSERT_ID();是SQL,不知道你的平台是否支持
  • 感谢@MadeInDreams,但它不可用。 :-(
  • @MadeInDreams,但你非常接近 - 它帮助我找到了正确的函数,即 LAST_INSERT_ROWID。
  • 不开玩笑@DourHighArch!哎呀,我自己投票决定关闭它 - 就像我在下面所说的那样,我寻找答案但找不到它。所以有时很难找到答案——有时不是。令人费解。

标签: c# sqlite system.data.sqlite


【解决方案1】:

对于 SQLite,您可以使用

SELECT last_insert_rowid()

这是另一个包含更多详细信息的 stackoverflow 帖子

How to retrieve the last autoincremented ID from a SQLite table?

【讨论】:

  • 当然,这使我的问题成为 DUP。这就是让我烦恼的地方!我多次搜索您指定的答案,但没有一个搜索结果包含该已回答的问题。还是我向下滚动的时间不够长?谢谢你的回答。
  • 是的,这是堆栈的缺点之一。问题编辑往往会稍微提高标准,如果您不知道函数被调用或什至存在,则更难找到。
猜你喜欢
  • 2020-03-13
  • 2014-02-17
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 2020-05-16
  • 2016-06-16
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多