SQLite数据库中获取新插入数据的自增长ID

Posted 3bugs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite数据库中获取新插入数据的自增长ID相关的知识,希望对你有一定的参考价值。

SQLite数据库中有一有列名为ID的自增列,项目需求要在向数据库在插入新数据的同时返回新插入数据行的ID。

我这里用事务,把插入和查询语句通过ExecuteReader一起提交。

实现代码

public bool Insert(string topic, string key, string value, out int id)
{
    DbProviderFactory factory = SQLiteFactory.Instance;
    using (DbConnection conn = factory.CreateConnection())
    {
        conn.ConnectionString = _connectionString;
        conn.Open();

        DbCommand cmdInsert = conn.CreateCommand();
        cmdInsert.Parameters.Add(cmdInsert.CreateParameter());
        cmdInsert.Parameters.Add(cmdInsert.CreateParameter());
        cmdInsert.Parameters.Add(cmdInsert.CreateParameter());

        DbTransaction trans = conn.BeginTransaction();
        try
        {
            cmdInsert.CommandText = "INSERT INTO [{0}] ([Topic],[Key],[Value]) VALUES (?,?,?);SELECT LAST_INSERT_ROWID() FROM [{0}]";
            cmdInsert.CommandText = string.Format(cmdInsert.CommandText, _messageTableName);
            cmdInsert.Parameters[0].Value = topic;
            cmdInsert.Parameters[1].Value = key;
            cmdInsert.Parameters[2].Value = value;
            DbDataReader reader = cmdInsert.ExecuteReader();
            trans.Commit();

            if (reader.Read())
            {
                id = int.Parse(reader[0].ToString());
                reader.Close();
                return true;
            }
            else
            {
                SAEC_Log4net.Log.Error("insert message to db fail");
                id = 0;
                return false;
            }
        }
        catch (Exception e)
        {
            trans.Rollback();
            SAEC_Log4net.Log.Error(e.ToString());
            id = 0;
            return false;
        }
    }
}

 

以上是关于SQLite数据库中获取新插入数据的自增长ID的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 中获取刚插入的自增长id的值

Mybatis获取插入记录的自增长ID

Mybatis获取插入记录的自增长ID(转)

C#中怎么怎么获取插入的新纪录的自增的id号

linq2db Sqlite Insert之后获取插入的自增量ID值

将数据插入SQLite表后如何获取最后一行ID [重复]