2010-08-05 99 views
0

好,所以很容易在VB,但我不能算出它在C#:添加變量串在ASP.net

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = '" & username & "'", cn); 

這將引發

CS0019: Operator '&' cannot be applied to operands of type 'string' and 'string' 

Google搜索,並能找不到答案,請幫助這個新手在這裏!

+0

使用+運算符而不是&運算符。 – adatapost 2010-08-05 14:46:39

+0

選擇COUNT(*)FROM tblUsers WHERE username ='「+ username +」OR 1 = 1'「,cn); – Paco 2010-08-05 14:52:34

+0

Paco,這就是黑客如何爲「用戶名」輸入一個垃圾值,以使您的查詢始終爲真。 – 2010-08-05 14:53:28

回答

3

你已經拿到了6(和計數)建議使用+而不是&。然而,從長遠來看,使用參數化查詢而不是直接將變量串聯到SQL語句中會更好。通過連接,特別是如果這是用戶輸入,您可以廣泛開放SQL注入攻擊。通過使用參數,可以阻止SQL注入。

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = @user"); 
cmd.Parameters.AddWithValue("@user", username); 
+0

非常好,謝謝。 – 2010-08-05 14:54:09

+0

非常好的一點,+1。真的看着那裏的整體問題,是的,你通常應該使用sql參數來處理這類事情應該說,我總是在查詢中運行之前對輸入進行清理,我意識到SQL注入的缺陷,但這似乎是另一個很好的防禦。 – Chris 2010-08-05 14:57:51

2

使用 '+',而不是 '&'

3

使用+到concatentate字符串。 &可以作爲一元運算符或二元運算符。

但是,正確的答案是使用參數化查詢!

您使用的方法受到SQL injection攻擊。

2

+是C#中的字符串連接運算符。

2

使用 「+」,而不是 「&」

的SqlCommand CMD =新的SqlCommand( 「SELECT COUNT(*)FROM向tblUsers WHERE用戶名= '」 +用戶名+ 「'」,CN);

2

使用+而不是

'" + username + "'" 
2

,我更喜歡這種thign另一種選擇是的String.Format:

SqlCommand cmd = new SqlCommand(String.Format("SELECT COUNT(*) FROM tblUsers WHERE username = '{0}'",username), cn); 
+0

+1我正要寫同樣的東西 – PhilPursglove 2010-08-05 14:50:24