我找到了几个如何从sql insert调用到我的SQLite数据库中获取最后插入的行id的例子,但是我的脚本引发了这个错误:
SQLiteException
Message = "SQLite error\r\nnear \")\": syntax error"
InnerException
NULL
下面是我发送的SQL文本以及我如何使用它。显然,我误解了一些事情。有人可以帮助我吗?
我正在尝试返回刚刚插入的ID号。
private static int Save(Dates date, SQLiteConnection con) {
// REF: http://www.sqlite.org/c3ref/last_insert_rowid.html
int result = 0;
string sql = "INSERT INTO Dates1 " +
"(ID, TaskID, Last1) " +
"VALUES " +
"((SELECT MAX(ID) FROM Dates1)+1, @TaskID, @Last); " +
"SELECT sqlite3_last_insert_rowid(sqlite3*);";
using (SQLiteCommand cmd = new SQLiteCommand(sql, con)) {
cmd.Parameters.AddWithValue(Dates.AT_TASK, date.TaskID);
cmd.Parameters.AddWithValue(Dates.AT_LAST, date.Last.ToShortDateString());
cmd.CommandText = Dates.SQL_INSERT;
try {
result = cmd.ExecuteNonQuery();
} catch (SQLiteException err) {
result = -1;
LogError("Save(Dates, SQLiteConnection)", err);
}
}
return result;
}
仅供参考:我已经设置了表格,因此ID
应该使用下面的创建 SQL
自动生成,但该表只存储-1
} ID
值,除非我手动插入它。
public const string SQL_CREATE = "CREATE TABLE Dates1 " +
"(ID INTEGER PRIMARY KEY AUTOINCREMENT, TaskID INTEGER, Last1 TEXT);";
答案 0 :(得分:14)
last_insert_rowid() last_insert_rowid()函数返回调用该函数的数据库连接中最后一行插入的ROWID。 last_insert_rowid()SQL函数是sqlite3_last_insert_rowid()C / C ++接口函数的包装器。
所以你需要将你的陈述改为:
"SELECT last_insert_rowid();"
因为您所做的是尝试调用C API函数。