SQLite數據庫中獲取新插入數據的自增長ID


SQLite數據庫中有一有列名為ID的自增列,項目需求要在向數據庫在插入新數據的同時返回新插入數據行的ID。

我這里用事務,把插入和查詢語句通過ExecuteReader一起提交,返回DbDataReader。

實現代碼

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;
        }
    }
}

 

轉載請注明出處:http://www.cnblogs.com/keitsi/p/5558985.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM