SQLite Letzten Insert-Rowid Funktioniert Nicht

Fand ich mehrere Beispiele, wie man das zuletzt eingefügte Zeilen-id, die aus einer sql-insert-Aufruf zu meiner SQLite Datenbank, aber mein Skript warf dieser Fehler:

SQLiteException
Message = "SQLite error\r\nnear \")\": syntax error"
InnerException
NULL

Unten ist der SQL-text, den ich eingeschickt und wie ich es benutzt habe. Offensichtlich habe ich etwas falsch verstanden. Könnte mir jemand helfen hier?

Ich versuche, die Rückkehr der ID-Nummer, die nur eingefügt wurde.

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

Zur info: ich habe die Tabelle so, dass ID soll automatisch generiert mit dem Erstellen SQL unten, aber die Tabelle speichert nur -1 für die ID Werte nur, wenn ich manuell einfügen.

public const string SQL_CREATE = "CREATE TABLE Dates1 " +
  "(ID INTEGER PRIMARY KEY AUTOINCREMENT, TaskID INTEGER, Last1 TEXT);";
  • Verwenden Sie System.Data.SQLite (sqlite.phxsoftware.com) oder eine der anderen SQLite-Wrapper für .NET?
  • Ja, System.Data.SQLite.
InformationsquelleAutor jp2code | 2011-12-31
Schreibe einen Kommentar