SQLite上次插入Rowid不起作用

jp2*_*ode 7 c# sqlite

我找到了几个如何从sql插入调用到我的SQLite数据库中获取最后插入行id的示例,但是我的脚本抛出了这个错误:

SQLiteException
Message = "SQLite error\r\nnear \")\": syntax error"
InnerException
NULL
Run Code Online (Sandbox Code Playgroud)

下面是我发送的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;
}
Run Code Online (Sandbox Code Playgroud)

FYI:我已经设置了表,以便ID应该是使用自动生成的创建 SQL下面,但该表只存储-1ID值,除非我手动插入.

public const string SQL_CREATE = "CREATE TABLE Dates1 " +
  "(ID INTEGER PRIMARY KEY AUTOINCREMENT, TaskID INTEGER, Last1 TEXT);";
Run Code Online (Sandbox Code Playgroud)

Chr*_*Wue 14

引用SQLite文档:

last_insert_rowid() last_insert_rowid()函数返回调用该函数的数据库连接中最后一行插入的ROWID.last_insert_rowid()SQL函数是sqlite3_last_insert_rowid()C/C++接口函数的包装器.

所以你需要将你的陈述改为:

"SELECT last_insert_rowid();"
Run Code Online (Sandbox Code Playgroud)

因为你所做的是尝试调用C API函数.