2014-03-17 4 views
0

Для вставки Я уже использую параметризованную запрос:Предотвращение SQL Injection в тех случаях, когда запрос - SQL Server 2008 и C#

cmd.Parameters.Add("@ParamName",SqlDbType.VarChar).Value = objCampaignType.Name; 

У меня есть SQL-запрос для поиска данных из поиска текста

SELECT p.Name, c.Name 
FROM Person AS p 
INNER JOIN Country AS c ON p.Country = c.ID 
WHERE p.Name LIKE '%searchText%' AND c.Name = USA 

Как использовать ли параметризованный запрос для предотвращения внедрения SQL с помощью C#?

Я использую SQL Server 2008 и .Net C#

Спасибо заранее ...

ответ

1
using (var conn = new SqlConnection(connectionString)) { 
    var query = @" 
SELECT  p.Name, c.Name 
FROM   Person AS p INNER JOIN 
        Country AS c ON p.Country = c.ID 
WHERE p.Name LIKE '%' + @SearchText + '%' AND c.Name = @CountryName"; 
    var cmd = new SqlCommand(query, conn); 
    cmd.Parameters.Add("SearchText", System.Data.SqlDbType.VarChar, 50).Value = "search text"; 
    cmd.Parameters.Add("CountryName", System.Data.SqlDbType.VarChar, 50).Value = "USA"; 
    conn.Open(); 
    using (var reader = cmd.ExecuteReader()) { 
     while (reader.Read()) { 
     // enjoy dataset 
     } 
    } 
    } 
+0

будет это предотвратить SQL-инъекции? это легко? :) –

+0

@ yohan.jayarathna - это предотвратит инъекционную атаку для этого запроса; Я не знаю, как выглядит остальная часть вашего кода :) все запросы должны быть параметрическими. –

+0

Я нашел точную ссылку по этой ссылке http://stackoverflow.com/questions/228476/avoiding-sql-injection-in-sql-query-with-like-operator-using-parameters –

1

Вам нужно будет использовать системную хранимую процедуру sp_executesql и передать параметры этой процедуры что-то вроде этого ....

DECLARE @Sql NVARCHAR(MAX); 
DECLARE @Search NVARCHAR(100) = 'Searchme'; 


SET @Sql = N' SELECT  p.Name, c.Name ' + 
      N' FROM Person AS p INNER JOIN Country AS c ON p.Country = c.ID ' + 
      N' WHERE p.Name LIKE ''%@Search%'' AND c.Name = USA' 

EXECUTE sp_executesql @Sql 
        ,N'@Search NVARCHAR(100)' 
        ,@Search 

 Смежные вопросы

  • Нет связанных вопросов^_^