SQLiteException“”附近的SQLite错误@Param1”;语法错误

本文关键字:错误 语法 @Param1 SQLite SQLiteException | 更新日期: 2023-09-27 18:20:07

我有一个为新项目创建的SQLite表。

表的CREATEINSERT命令定义如下:

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 error near"@LocID"syntax error。"

这是我的插入例程:

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()上引发错误。

我做错了什么?

在Win7 Visual Studio 2008(C#)中使用SQLite 3,针对Windows Mobile 5(掌上电脑)。

SQLiteException“”附近的SQLite错误@Param1”;语法错误

SQL_INSERT字符串中@LocID之前缺少左括号。

public const string SQL_INSERT = "INSERT INTO Tanks " +
  "(LocID, InUse, Text1, Description1) " +
  "VALUES " +
  "(@LocID, @InUse, @Text, @Description); ";

您缺少一个(。改为:

public const string SQL_INSERT = "INSERT INTO Tanks " +
"(LocID, InUse, Text1, Description1) " +
"VALUES " +
"(@LocID, @InUse, @Text, @Description); ";