【问题标题】:SQLiteException SQLite error near "@Param1" syntax error [closed]SQLiteException“@Param1”语法错误附近的SQLite错误[关闭]
【发布时间】:2012-01-10 20:40:01
【问题描述】:

我有一个为新项目创建的 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); ";

每当我尝试将我的第一个值保存到表中时,我都会收到无用的消息,““@LocID”语法错误附近的 SQLite 错误。”

这是我的插入例程:

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)。

【问题讨论】:

  • 对于初学者来说,在 Values 之后查看您的 Insert 语句.. 不应该有 Values(, , , ) 您传递的任何参数值..?请展示坦克的结构是什么......

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


【解决方案1】:

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

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

【讨论】:

  • 我讨厌 Noobie 这样的错误。
【解决方案2】:

您缺少(。改为这样做:

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

【讨论】:

  • 废话,废话,废话!我不敢相信我在这个问题上挣扎了那么久。
猜你喜欢
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多