2011-12-31 8 views
7

機能しない私は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);"; 
+1

.NET用の 'System.Data.SQLite'(http://sqlite.phxsoftware.com/)または他のSQLiteラッパーの1つを使用していますか? –

+0

はい、 'System.Data.SQLite'です。 – jp2code

答えて

13

+0

シャザム!それはそれだった。ありがとう。私はかなりドキュメントでそれを見つけることができませんでした。 – jp2code

関連する問題