0

我正在尝试使用 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

在调试模式下,这就是字符串最终的样子:

更新付款
                                                SET MONTANT=-390, TYPE='4-Comptant',note='PPA',flag='O', date='20120601'
                                                哪里 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”而不是实际值。

4

2 回答 2

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 
于 2012-06-01T17:19:27.097 回答
1

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

于 2012-06-02T18:06:19.393 回答