he encontrado varios ejemplos de cómo obtener la última fila Identificación insertado desde una llamada de inserción SQL a la base de datos SQLite, pero mi guión lanzó este error:SQLite última inserción Idfila no funciona
SQLiteException
Message = "SQLite error\r\nnear \")\": syntax error"
InnerException
NULL
A continuación se muestra la Texto SQL que envié y cómo lo usé. Obviamente, entendí mal algo. ¿Podría alguien ayudarme aquí?
Estoy tratando de devolver el número de ID que acabo de insertar.
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;
}
FYI: He creado una tabla para que ID
se supone que es generado de forma automática mediante el CrearSQL
a continuación, pero la tabla sólo almacena -1
para los ID
valores a menos que inserte manualmente.
public const string SQL_CREATE = "CREATE TABLE Dates1 " +
"(ID INTEGER PRIMARY KEY AUTOINCREMENT, TaskID INTEGER, Last1 TEXT);";
¿Está utilizando 'System.Data.SQLite' (http://sqlite.phxsoftware.com/) o uno de los otros contenedores SQLite para .NET? –
Sí, 'System.Data.SQLite'. – jp2code