C# - UPDATE语句中的语法错误

时间:2012-06-01 16:38:09

标签: c# sql

我正在尝试使用C#更新数据库,但是我收到错误:“UPDATE语句中的语法错误”。我已经四处查看了这个错误的其他例子,发现了很多,但每个都不同。很多事情都可能导致这个错误,我只是不能指责这个错误。

query = String.Format(@"UPDATE PAYMENT 
                    SET MONTANT={0}, TYPE='4-Comptant',note='PPA',flag='O', date='{2:yyyyMMdd}'       
                    WHERE num_payment={1}", -payment, id, dt);
                    daUpdate.UpdateCommand.CommandText = query;
                    daUpdate.UpdateCommand.ExecuteNonQuery();  //update the table in the database

在调试模式下,这就是字符串最终看起来像:

UPDATE PAYMENT 
                                                SET MONTANT=-390, TYPE='4-Comptant',note='PPA',flag='O', date='20120601'
                                                WHERE num_payment=8

在数据库中,num_payment是一个长整数和一个主键。 MONTANT是双重的,其他一切都是文本。

编辑:按照人们的建议,我修改了一些东西,但我仍然得到同样的错误。这就是现在的样子:

                    OleDbCommand cmd = _con.CreateCommand();
                    cmd.CommandText = @"UPDATE PAYMENT 
                    SET MONTANT=@montant, [TYPE]='4-Comptant',note='PPA',flag='O', [date]=@theDate 
                    WHERE num_payment=@numPayment";

                    cmd.Parameters.AddWithValue("@montant", -payment);
                    cmd.Parameters.AddWithValue("@theDate", String.Format("{0:yyyyMMdd}", dt));
                    cmd.Parameters.AddWithValue("@numPayment", id);
                    cmd.ExecuteNonQuery();

调试输出看起来一样 和以前一样,除了现在我看到'@something'而不是真正的价值。

2 个答案:

答案 0 :(得分:1)

在[TYPE]和[DATE]周围放置方括号,这些是SQL关键字。

query = String.Format(@"UPDATE PAYMENT  
                SET MONTANT={0}, [TYPE]='4-Comptant',note='PPA',flag='O', [date]='{2:yyyyMMdd}'        
                WHERE num_payment={1}", -payment, id, dt); 
                daUpdate.UpdateCommand.CommandText = query; 
                daUpdate.UpdateCommand.ExecuteNonQuery();  //update the table in the 

答案 1 :(得分:1)

字段'note'和'flag'需要在它们周围有[]。我添加了这些,现在查询不再提供该错误。