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

时间:2012-01-10 20:40:01

标签: c# sql visual-studio-2008 sqlite

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

表的 CREATE INSERT 命令定义如下:

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错误附近的”@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()

我做错了什么?

在Win7 Visual Studio 2008(C#)中使用SQLite 3,以Windows Mobile 5(Pocket PC)为目标。

2 个答案:

答案 0 :(得分:4)

你错过了SQL_INSERT字符串中@LocID之前的左括号。

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

答案 1 :(得分:2)

您错过了(。这样做:

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