Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Where查询中防止SQL注入-SQL Server 2008和C#_Sql_C# 4.0_Sql Injection_Parameterized - Fatal编程技术网

在Where查询中防止SQL注入-SQL Server 2008和C#

在Where查询中防止SQL注入-SQL Server 2008和C#,sql,c#-4.0,sql-injection,parameterized,Sql,C# 4.0,Sql Injection,Parameterized,对于插入,我已使用参数化查询: 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 = US

对于插入,我已使用参数化查询:

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
如何使用参数化查询来防止使用C#的SQL注入

我正在使用SQLServer2008和.NETC#


提前感谢…

您将需要使用系统存储过程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

这会阻止sql注入吗?这容易吗?:)@jayarathna-它将防止此查询的注入攻击;我不知道你剩下的代码是什么样子:)所有的查询都必须是参数化的。我从这个链接中找到了确切的答案
  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
      }
    }
  }