INSERT INTO语句中的语法错误

时间:2017-07-29 05:56:09

标签: sql ms-access sql-insert insert-into

我正在尝试在MS Access数据库中插入一些信息。 在我的数据库中,我有以下列和类型:

log_order - Autonumber (I need this to keep the order where inserted in the db),
userID - Text,
time - Text,
date_ - text,
message - Text.

我的查询:

command.CommandText = "INSERT INTO logs(userID, time, date_, message) VALUES ('"+verifiedUser+"', '"+msg_time+"', '"+msg_date+"', '"+msg+"')";        

OleDbDataReader reader = command.ExecuteReader();

我得到的错误:

  

System.Data.OleDb.OleDbException:'INSERT INTO语句中的语法错误。'

我尝试了几个帖子,但没有帖子帮助过我。我相信自动编号列可能存在问题(log_order)。因为我记得我不必将它包含在查询中。

PS:我知道我必须将值作为参数传递。

提前谢谢

3 个答案:

答案 0 :(得分:2)

你的一个变量(msg?)可能包含一个撇号

您编写SQL的方式存在巨大的安全风险。请立即查找“参数化查询”,永远不要再写这样的sql(使用字符串连接将值添加到查询中)。您的代码存在大量问题,使用参数化查询将解决所有问题;他们写起来并不难

enter image description here

答案 1 :(得分:0)

看来你在INSERT中传递的一些变量中的数据可能会导致这个错误。在执行之前尝试调试command.CommandText中的值。 如果任何变量都有单引号,则必须将其转义... 参考:How do I escape a single quote in SQL Server?

同时了解SQL注入参考:SQL Injection

答案 2 :(得分:0)

我完全赞同所说的一切,但为了直接回答你的问题,我很确定你需要在你的字段名称旁边加上方括号。 OleDb倾向于不喜欢特殊字符,并且很可能遇到问题,例如date_;发送[date_]代替应该解决问题。 它也不会喜欢时间。相同的解决方案

SQL注入附录

顺便说一下,实际上通过OleDb调用Access相对于SQL注入是受到保护的。这是因为在一个命令中执行多个指令的任何尝试都会失败。 (您收到格式错误的字符串错误)。因此,虽然您可能认为您正在做的事情是安全的,但它不适用于其他数据库提供商。您越早养成良好习惯,在可能存在危险的情况下引入漏洞的可能性就越小。如果你似乎得到了一连串的滥用行为,那只是因为这里的每个人都希望保持网络安全。