2017-07-29 206 views
0

我试图在MS Access数据库中插入一些信息。 在我的数据库,我有以下字段和类型:INSERT INTO语句中的语法错误

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:我知道我必须通过值作为参数。

预先感谢您

+0

在Access中直接尝试您的查询并查看出现了哪些错误。如果那实际上是一个数字字段,我猜可能在verifiedUser周围引用可能会导致一个问题。 – PhillipXT

+0

@marc_s请不要这样做..我意识到,许多用户来为了快速解决他们的垃圾解决方案需求,但有时他们确实需要被告知正确启动它。你永远不知道谁可能会写电子商务解决方案,有一天会存储你的信用卡号码;) –

回答

2

可能是你的一个变量(MSG?)包含一个单引号

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

enter image description here

+0

感谢您的建议。但味精变量不是错误。 – kdem

+4

那整个sql都是错误的.. –

0

我完全都已经表示同意,但直接回答你的问题,我很肯定你需要在你的字段名称周围加方括号。 OleDb倾向于不喜欢特殊字符,并且可能会出现问题,例如date_;发送[date_]应该绕过这个问题。 它也不会喜欢时间。 SQL注入

通过OleDb的题外话,其实主叫接入同一个解决方案

附录相对免受SQL注入。这是因为在一个命令中执行多个指令的任何尝试都会失败。 (你得到一个不正确的格式化字符串错误)。所以虽然你可以争辩说你在做什么是安全的,但它不适用于其他数据库提供者。越早进入良好习惯,在可能会导致危险的情况下引入漏洞的可能性就越小。如果看起来你正在遭受一连串的虐待,那只是因为这里的每个人都想保持网络的安全。

+0

解决了它,非常感谢! – kdem

相关问题