小编典典

带参数的SqlCommand

sql

我使用以下代码从SQL Server表中进行选择:

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没有任何结果。

知道为什么吗?


阅读 142

收藏
2021-04-14

共1个答案

小编典典

“为什么?” 这是因为很少有电影的名称中带有“ @Search”一词-即“ Indiana Jones and the Last
@Search”。也许是《星际迷航3:@搜索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 + "%");
2021-04-14