我多次检查我的SQL语句,似乎我的SQL语句是错误的。我不知道为什么它不起作用。我的SQL语句是正确的,它导致了这个OleDBException“UPDATE语句中的语法错误。”。
这是代码
OleDbConnection CN = new OleDbConnection(mysql.CON.ConnectionString);
CN.Open();
cmd1 = new OleDbCommand("Update Mosque Set Name='" + txtNAME.Text + "', No='" + Convert.ToInt32(txtNO.Text) + "', place='" + txtPlace.Text + "', group='" + txtGroup.Text + "', description='" + txtdec.Text + "' where id='" + txtID.Text + "'", CN);
cmd1.ExecuteNonQuery();
CN.Close();
需要帮助,请知道这里的错误是什么
答案 0 :(得分:5)
我不知道您使用的是什么数据库,但我确信GROUP在几乎任何存在的SQL数据库中都是保留关键字。如果没有某种分隔符,就不能使用这个词。确切的分隔符类型取决于数据库类型。你在用什么数据库?
说,请不要使用字符串连接来构建sql命令,但始终使用参数化查询。这将允许您删除Sql Injection的任何可能性,并避免任何语法错误,如果您的一个或多个输入字符串在某处包含单引号
因此,假设您正在使用MS Access数据库(在Access中,单词NO是保留关键字,保留关键字的分隔符是方形块),您可以编写类似这样的内容
string commandText = "Update Mosque Set Name=?, [No]=?, place=?, " +
"[Group]=?, description=? where id=?"
using(OleDbConnection CN = new OleDbConnection(mysql.CON.ConnectionString))
using(OleDbCommand cmd1 = new OleDbCommand(commandText, CN))
{
CN.Open();
cmd1.Parameters.AddWithValue("@p1",txtNAME.Text);
cmd1.Parameters.AddWithValue("@p2",Convert.ToInt32(txtNO.Text));
cmd1.Parameters.AddWithValue("@p3",txtPlace.Text);
cmd1.Parameters.AddWithValue("@p4",txtGroup.Text);
cmd1.Parameters.AddWithValue("@p5",txtdec.Text);
cmd1.Parameters.AddWithValue("@p6",txtID.Text);
cmd1.ExecuteNonQuery();
}
而不是MySQL,你必须使用GROUP关键字
周围的反引号string commandText = "Update Mosque Set Name=?, No=?, place=?, " +
"`Group`=?, description=? where id=?"
答案 1 :(得分:0)
很难在不知道texbox的值的情况下判断,但我怀疑其中一个有撇号导致语法无效。
我建议改用参数:
cmd1 = new OleDbCommand("Update Mosque Set [Name]=@Name, [No]=@No, [place]=@Place, [group]=@Group, [description]=@Description WHERE id=@ID", CN);
cmd1.Parameters.AddWithValue("@Name",txtNAME.Text);
cmd1.Parameters.AddWithValue("@No",Convert.ToInt32(txtNO.Text));
// etc.