2014-03-26 56 views
1

我做出選擇從SQL Server表使用此代碼:SqlCommand時使用的參數

using (SqlConnection con = new SqlConnection(SqlConnectionString)) 
{ 
    string sql = @"SELECT * FROM movies WHERE title like '%' + '" + searchQuery + "' + '%'"; 

    using (var command = new SqlCommand(sql, con)) 
    { 
     con.Open(); 

     using (var reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       .... 
      } 
     } 
    } 
} 

它完美的作品,但我想,以防止SQL注入,所以我嘗試使用:

using (SqlConnection con = new SqlConnection(SqlConnectionString)) 
{ 
    string sql = @"SELECT * FROM movies WHERE title like '%' '@Search' + '%'"; 

    using (var command = new SqlCommand(sql, con)) 
    { 
     command.Parameters.AddWithValue("@Search", searchQuery); 
     con.Open(); 

     using (var reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       .......... 
      } 
     } 
    } 
} 

而當我嘗試執行此操作時,我無法從SQL Server獲得任何結果。

任何想法爲什麼?

+0

標題已關閉 - 您從不在SqlConnection上設置參數 - 以防萬一您不知道SqlConnection和SqlCommand之間存在差異。 – TomTom

回答

6

「爲什麼?」是因爲很少有電影的名字中有「@Search」這個詞 - 即「印第安納瓊斯和最後@搜索」。也許是「星際迷航III:搜索Spock」​​。通過將它括在單引號中,您正在查找字面字符串@Search,而不是參數的值@Search

string sql = @"SELECT * FROM movies WHERE title like '%' + @Search + '%'"; 

或(最好,IMO):

string sql = @"SELECT * FROM movies WHERE title like @Search"; 

,並添加%在調用點:

command.Parameters.AddWithValue("Search", "%" + searchQuery + "%"); 
+0

喜歡上網:[電影在標題中搜索](http://www.imdb.com/find?q=Search&s=tt) - 但請注意,標題中沒有'@ Search'。 –

+1

我認爲這是一個該死的恥辱,並顯示我們的電影製作人有多少教育。 @Search for Spock會比沒有@更好的標題。 – TomTom

0

試試這個:

using (SqlConnection con = new SqlConnection(SqlConnectionString)) 
{ 
    string sql = @"SELECT * FROM movies WHERE title like '%' + @Search + '%'"; 

    using (var command = new SqlCommand(sql, con)) 
    { 
     command.Parameters.AddWithValue("@Search", searchQuery); 
     con.Open(); 
     using (var reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 

      } 
     } 
    } 
} 

我改變字符串sql,我認爲它可以提供幫助。

0

不要使用單引號'@Search',因爲它在這裏像變量一樣工作。