在尝试更新我的数据库时,我遇到了这个例外:
解析查询时出错:[令牌行号= 1,令牌行偏移= 28,错误令牌=组]
我的代码如下:
private void btnUpdate_Click(object sender, EventArgs e)
{
con.Open();
string strQuery = "UPDATE test_group SET Main Group = '" + comboBox1.Text + "', Sub Group = '" + richTextBox2.Text + "' WHERE Group Id = '" + richTextBox1.Text + "'";
System.Data.SqlServerCe.SqlCeCommand cmdSelect = new System.Data.SqlServerCe.SqlCeCommand();
cmdSelect.Connection = con;
cmdSelect.CommandType = CommandType.Text;
cmdSelect.CommandText = strQuery;
cmdSelect.ExecuteNonQuery();
updatedb();
con.Close();
}
Plz帮助我。 提前感谢你的帮助。
答案 0 :(得分:4)
GROUP
是reserved keyword,您需要将它们括在括号中。具有空格的列也是如此:
UPDATE test_group SET [Main Group] = @group, [Sub Group] = @subGroup ...
但是你应该使用sql-parameters来阻止sql-injection。
using (var con = new SqlCeConnection("ConnectionString"))
{
string strQuery = @"UPDATE test_group SET [Main Group] = @group,
[Sub Group] = @subGroup
WHERE [Group Id] = @groupID";
using(var command = new SqlCeCommand(strQuery, con))
{
command.Parameters.AddWithValue("@group", comboBox1.Text);
command.Parameters.AddWithValue("@subGroup", richTextBox2.Text );
command.Parameters.AddWithValue("@groupID", richTextBox1.Text );
con.Open();
int updated = command.ExecuteNonQuery();
}
}
请注意,AddWithValue
需要从值中检测类型,因此如果Group Id
是int,则应首先使用int.Parse
。
旁注:使用带空格的列名称当然不是一个好习惯。总是要使用[]是一种痛苦,不是吗?
答案 1 :(得分:2)
主要问题是包含空格的字段名称。在这种情况下,您的字段名称应该用方括号括起来,但是您还有另一个危险的问题。连接字符串以构建sql命令是一种非常糟糕的做法,可能导致称为Sql Iniection的危险安全问题,更不用说如果一个或多个字符串包含单引号,则非常可能出现语法错误。执行查询的正确方法是使用参数化查询
string strQuery = "UPDATE test_group SET [Main Group] = @grp, [Sub Group] = @sub " +
"WHERE [Group Id] = @grpID";
using(SqlCeCommand cmdSelect = new System.Data.SqlServerCe.SqlCeCommand(strQuery, con))
{
cmdSelect.Parameters.AddWithValue("@grp", comboBox1.Text);
cmdSelect.Parameters.AddWithValue("@sub", richTextBox2.Text);
cmdSelect.Parameters.AddWithValue("@grpID", richTextBox1.Text);
cmdSelect.ExecuteNonQuery();
updatedb();
con.Close();
}
我真的建议您更改删除空格的字段名称(如果可能在应用程序的上下文中),因为每次尝试使用此表时都会遇到此类问题
答案 2 :(得分:1)
您的列名中有空格,您应该在它们周围添加大括号:[column name]
答案 3 :(得分:-1)
请试试这个
string strQuery = "UPDATE test_group SET [Main Group] = '" + comboBox1.Text + "', Sub Group = '"
+ richTextBox2.Text + "' WHERE Group Id = '" + richTextBox1.Text + "'";
Main和Group之间有一个空格