我正在尝试使用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'而不是真正的价值。
答案 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'需要在它们周围有[]。我添加了这些,现在查询不再提供该错误。