2014-04-10 71 views
0

我試圖讓用戶在文本框內輸入詳細信息並使用該信息來運行SQL查詢。它的工作原理,當我硬編碼如一切:當我嘗試使用文本框代替如下,它返回一個錯誤無法使用文本框輸入執行查詢

string query = "SELECT * FROM PERSONS WHERE Name='Samuel'"; 

。我肯定在文本框中輸入了正確的名字塞繆爾。我運行了一個消息框來檢查文本框是否正確註冊了名稱,是的,這是正確的。如果您發現任何問題,請諮詢。謝謝。

name = textbox4.Text; 
MessageBox.Show(name); 
string query = "SELECT * FROM PERSONS WHERE Name=" + name; 
+4

[我只是要離開這裏...](http://xkcd.com/327/) – Sayse

+2

小鮑比表再次罷工。 – spencer7593

回答

0

你忘了引號。更改查詢象下面這樣:

string query = "SELECT * FROM PERSONS WHERE Name='" + name + "'"; 
+1

@keshk,如果你錯過了我以前的鏈接的相關性,請嘗試進入你的文本框,''; DROP TABLE PERSONS'的值;' – Sayse

+1

@Sayse:或者只是**'「O'Reily」**。或者**'「A」或「1」=「1」**。 – spencer7593

+0

當然,使用ORM工具或至少命令參數將是一個更好的選擇 – CuriousPen

0
string query = "SELECT * FROM PERSONS WHERE Name=" + name; 

應該

string query = "Select * From PERSONS Where name = '" + name + "'" ; 
0

使用
name=txbox.Text;
dbLog.Open("SELECT * FROM Persons WHERE Name='" & name & "'", dbCon, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)

1

什麼語言? C#?

string query = string.Format("SELECT * FROM PERSONS WHERE Name = '{0}'", SanitizeSql(name)); 

或者你也可以冷靜和使用https://github.com/markrendle/Simple.Data那就只是

IEnumerable<Person> people = db.Persons.FindAllByName(name); 

,這也需要SQL注入的照顧,是獨立於數據庫(這樣你就可以從MSSQL切換到MySQL到MongoDB的...)

+0

+1。等等,什麼?消除用戶提供的輸入?使用靜態SQL語句?用戶將在文本框中輸入**'「O'Reilly」**,並且「我只是假定一切都按計劃進行,什麼?」邪惡的風格小指手指到我的嘴角。 – spencer7593

+0

哈哈我知道。我使用Simple.Data來處理所有的SQL注入預防。應該把它抽象出來,不要放慢發展。 –