我多次检查我的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)
需要帮助请知道这里的错误是什么
我不知道您使用的是什么数据库,但我确信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)