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

use*_*526 0 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();
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*eve 6

我不知道您使用的是什么数据库,但我确信GROUP在几乎任何存在的SQL数据库中都是保留关键字.如果没有某种分隔符,就不能使用这个词.确切的分隔符类型取决于数据库类型.你用的是什么数据库?

说,请不要使用字符串连接来构建sql命令,但始终使用参数化查询.这将允许您删除任何Sql注入的可能性,并避免任何语法错误,如果您的输入字符串中的一个或多个包含单引号

因此,假设您正在使用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();
} 
Run Code Online (Sandbox Code Playgroud)

而不是MySQL,你必须使用GROUP关键字周围的反引号

string commandText = "Update Mosque Set Name=?, No=?, place=?, " + 
                     "`Group`=?, description=? where  id=?"
Run Code Online (Sandbox Code Playgroud)