新しいプロジェクト用に作成したSQLiteテーブルがあります。SQLiteException "@ Param1"構文エラーの近くのSQLiteエラー
public const string SQL_CREATE = "CREATE TABLE Tanks " +
"(LocID INTEGER, InUse INTEGER, Text1 TEXT, Description1 TEXT);";
public const string SQL_INSERT = "INSERT INTO Tanks " +
"(LocID, InUse, Text1, Description1) " +
"VALUES " +
"@LocID, @InUse, @Text, @Description); ";
私はテーブルに私の最初の値を保存しようとするたびに、私は「近くSQLiteのエラー」役に立たないメッセージを、取得:
テーブルのは、次のようにコマンドが定義されていとINSERTをCREATE @LocID "構文エラー。"ここで
は私の挿入ルーチンです:
public static Tank New(Tank tank) {
tank.Result = 0;
using (SQLiteConnection con = GetConnection) {
try {
con.Open();
using (SQLiteCommand cmd = new SQLiteCommand(Tank.SQL_INSERT, con)) {
cmd.Parameters.AddWithValue("@LocID", tank.LocationID); // = 1
cmd.Parameters.AddWithValue("@InUse", tank.InUse); // = 1 (for true)
cmd.Parameters.AddWithValue("@Text", tank.Text); // says "New Tank"
cmd.Parameters.AddWithValue("@Description", DBNull.Value); // I've tried "New Tank" and DBNull.Value
try {
tank.Result = cmd.ExecuteNonQuery();
} catch (SQLiteException err) {
tank.Result = -1;
LogError("New(Tank)", err);
throw err;
}
}
} finally {
con.Close();
}
}
return tank;
}
私はインデックスを使用してデータベースを作成していないと私はインデックス値を挿入するわけではないドキュメントが言うので:「すべてのテーブルのすべての行が64を持っていますビット整数ROWIDに署名した。それぞれの行のROWIDが同じテーブル内のすべての行の中で一意である。「少しさらにダウン同じページに、それは言う、」にはROWIDをインサートに指定されていない場合、または指定されたROWID場合値がNULLの場合、適切なROWIDが自動的に作成されます。 "ソース:sqlite.org/autoinc
ExecuteNonQuery()
にエラーがスローされます。
どうしたのですか?
のWindows Mobile 5(ポケットPC)をターゲットに、win7ののVisual Studio 2008(C#)とでSQLiteの3を使用しました。
まず、値の後にInsertステートメントを見てください。値(、、、)はあなたが渡しているパラメータの値です。タンクの構造も同じであることを示してください。 – MethodMan