2013-09-26 52 views
0

我多次检查SQL语句,看起来我的SQL语句是错误的。我不明白为什么它不起作用。我的SQL语句是正确的,并导致这个OleDBException“UPDATE语句中的语法错误。”。UPDATE语句中的语法错误OleDb异常

下面是代码

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

如何更新语句样子?你能打破它吗?我建议将查询首先存储到字符串变量中。使调试更容易。 –

+0

@ user2746526请将您的cmd1保存为一个字符串varialbe并将其打印出来供我们查看最终结果。 – Vulcronos

+1

在将它放入查询之前,您确实需要检查“txtName.Text”的字符串值。将变量直接放入查询中,极易发生SQL注入。这是一个主要的漏洞,并且会导致您的查询失败。 – JNYRanger

回答

5

,但我相信,集团是一个保留关键字在几乎任何外部SQL数据库中。如果没有某种分隔符,这个词就无法使用。确切的分隔符类型取决于数据库类型。你使用的是哪个数据库?

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

因此,假设您使用的是MS Access数据库(在Access中,单词“否”保留关键字和保留关键字的分隔符是方brakets)你可以写这样的事情

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=?" 
+0

史蒂夫,如果我插入一个空值我得到错误“输入字符串不是在一个正确的格式” – user2746526

+0

你在哪里插入空值?你可以发表一个新的问题,复制或引用这个问题并解释问题所在。 (更多人会看到你的新问题,你会很快得到回应) – Steve

0

哈rd告诉不知道的texboxes的值,但我怀疑他们之一有一个撇号导致无效的语法。

我建议使用参数,而不是:

cmd1 = new OleDbCommand("Update Mosque Set [Name][email protected], [No][email protected], [place][email protected], [group][email protected], [description][email protected] WHERE [email protected]", CN); 
    cmd1.Parameters.AddWithValue("@Name",txtNAME.Text); 
    cmd1.Parameters.AddWithValue("@No",Convert.ToInt32(txtNO.Text)); 
    // etc.