我試圖發送一個新的用戶在我的C#程序到數據庫(MSAccess在這種情況下)。我創建的字符串如下...OLEDB SQL語法錯誤,我看不到
String StrCmd = String.Format("INSERT INTO tbl_Users (Username, Password, IsAdmin) VALUES ('{0}', '{1}', {2});", Username, passwordHash, AdminPower);
這將創建一個SQL字符串,例如...
INSERT INTO tbl_Users (Username, Password, IsAdmin)
VALUES ('TestUser', '1013638657', False);
,如果我把它粘貼到MSACCESS查詢這工作得很好,但在代碼我不斷得到一個Syntax error in INSERT INTO statement.
錯誤。
任何人都可以看到明顯的東西我失蹤?
其它信息:
Username
和passwordHash
是字符串,AdminPower
是一個布爾值。
Username
和Password
是文本字段,IsAdmin
是是/否字段。
關注代碼塊...
OleDbConnection MyConn = new OleDbConnection(Program.ConnStr);
MyConn.Open();
String StrCmd = String.Format("INSERT INTO tbl_Users (Username, Password, IsAdmin) VALUES ('{0}', '{1}', {2});", Username, passwordHash, AdminPower);
OleDbCommand Cmd = new OleDbCommand(StrCmd, MyConn);
Cmd.ExecuteNonQuery();
MyConn.Close();
String.Format()是**不是一種可接受的方式來將值替換爲sql查詢。它仍然瘋狂 - 容易受到SQL注入攻擊。 –
謝謝,我已經考慮過了,但除了在將字符串傳遞給SQL之前清理字符串,坦率地說,如果管理員將坐在他們自己的筆記本電腦上的程序決定闖入數據庫,如果需要執行sql注入攻擊,他們可以打開坐在同一目錄中的數據庫文件。 ;) –
這是沒有藉口不這樣做的權利...清潔字符串是不正確的。隔離他們是。始終使用參數化查詢。 –