UPDATE语句中的语法错误OleDb异常

时间:2013-09-26 19:42:53

标签: c# mysql sql

我多次检查我的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();

需要帮助,请知道这里的错误是什么

2 个答案:

答案 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.