SQLiteException“”附近的SQLite错误@Param1”;语法错误
本文关键字:错误 语法 @Param1 SQLite SQLiteException | 更新日期: 2023-09-27 18:20:07
我有一个为新项目创建的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 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(掌上电脑)。
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); ";