我在 SQLite 中有一个表:
CREATE TABLE "EventType"
(
[EventTypeID] INTEGER PRIMARY KEY,
[EventTypeName] VARCHAR(50) NOT NULL UNIQUE
);
由于 EventTypeID 是一个整数和主键,因此会自动使其成为自动递增列,并且效果很好。
我想在表中插入一行并从 VB6 获取新增加的值。
Dim oRs as Recordset
dim oCmd as new Command
oCmd.ActiveConnection = GetConnection()
oCmd.Source = "insert into EventType (EventTypeName) values ('blah')"
oCmd.Execute
是否有一种自动方法来检索新创建的EventTypeID,而无需发出另一个查询(从EventType中选择max(EventTypeID))?
我似乎记得很久以前的VB6,有一种方法可以做到这一点。
查看常见问题解答。这 sqlite3_last_insert_rowid() 函数会做到这一点。小心 虽然会触发
未经测试,但您应该能够在一次调用中发送这两个语句。自从我写VB6以来已经有一段时间了。而且这不是 SQL 注入安全的。
Dim oRs as Recordset
dim sSql as String
sSql = "INSERT INTO EventType (EventTypeName) VALUES ('blah'); SELECT last_insert_rowid() FROM EventType"
oRs.Open sSql oConn
在代码中运行此查询:
SELECT SEQ from sqlite_sequence WHERE name='tablename'
我不使用VB,所以我不知道你在数据库中使用的接口,但是,正如bendewey所说,c API中有一个名为
sqlite3_last_insert_rowid()
的函数,它将返回主整数键最后插入的行,因此您可以在界面中查找类似的功能。
如果这不起作用,您可以使用 SQLite 特定的查询:
SELECT last_insert_rowid()
您可以在插入后致电
SELECT last_insert_rowid()
从3.35版本开始你可以使用
Insert Into <yourtable> Default Values Returning <idcolumn>
使用 ExecuteScalar 运行插入。
如果使用
SELECT last_insert_rowid()
返回最后一个
rowid
,你可以使用:
SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1
获取单个表的最后一个
rowid