2017-07-29 205 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

相關問題