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
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zitat aus der SQLite-Dokumentation:
So dass Sie brauchen, um Ihre Aussage zu:
weil das, was Sie Tat, war zu versuchen, und rufen Sie die C-API-Funktion.