【发布时间】:2012-01-10 20:40:01
【问题描述】:
我有一个为新项目创建的 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); ";
每当我尝试将我的第一个值保存到表中时,我都会收到无用的消息,““@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