機能しない私はSQLiteデータベースへのSQLのINSERT呼び出しから最後に挿入された行のIDを取得する方法の例をいくつか見つけましたが、私のスクリプトは、このエラーがスローされました:SQLiteの最終挿入ROWIDのは
以下SQLiteException
Message = "SQLite error\r\nnear \")\": syntax error"
InnerException
NULL
です私が送ったSQLテキストとその使い方明らかに、私は何かを誤解しました。誰かが私を助けてくれますか?
私はちょうど挿入されたID番号を返そうとしています。 ID
が自動私はそれを手動で挿入しない限り、が以下SQL
が、唯一のテーブル店舗ID
値について-1
を作成して使用して生成されることになっているように、私はテーブルを設定している:FYI
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;
}
。
last_insert_rowid() The last_insert_rowid() function returns the ROWID of the last row insert from the database connection which invoked the function. The last_insert_rowid() SQL function is a wrapper around the sqlite3_last_insert_rowid() C/C++ interface function.
だから、あなたがあなたの文を変更する必要があります:あなたがやったことはC API関数を試してみて、呼び出すことがあったので
"SELECT last_insert_rowid();"
SQLite documentationから引用し
public const string SQL_CREATE = "CREATE TABLE Dates1 " +
"(ID INTEGER PRIMARY KEY AUTOINCREMENT, TaskID INTEGER, Last1 TEXT);";
.NET用の 'System.Data.SQLite'(http://sqlite.phxsoftware.com/)または他のSQLiteラッパーの1つを使用していますか? –
はい、 'System.Data.SQLite'です。 – jp2code