C# 带参数的SqlCommand

C# 带参数的SqlCommand,c#,sql,.net,sql-server,C#,Sql,.net,Sql Server,我使用以下代码从SQL Server表中进行选择: using (SqlConnection con = new SqlConnection(SqlConnectionString)) { string sql = @"SELECT * FROM movies WHERE title like '%' + '" + searchQuery + "' + '%'"; using (var command = new SqlCommand(sql, con)) {

我使用以下代码从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不会产生任何结果

知道为什么吗?

之所以说“为什么?”是因为很少有电影的名字中有“搜索”这个词,即“印第安纳琼斯和最后一个搜索”。也许是《星际迷航III:寻找斯波克》。通过将其括在单引号中,可以查找文本字符串
@Search
,而不是名为
@Search
的参数值

或(最好是海事组织):

并在呼叫站点添加
%

command.Parameters.AddWithValue("Search", "%" + searchQuery + "%");
“为什么?”是因为很少有电影的名字中有“搜索”这个词,即“印第安纳琼斯和最后一个搜索”。也许是《星际迷航III:寻找斯波克》。通过将其括在单引号中,可以查找文本字符串
@Search
,而不是名为
@Search
的参数值

或(最好是海事组织):

并在呼叫站点添加
%

command.Parameters.AddWithValue("Search", "%" + searchQuery + "%");
试试这个:

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())
            {

            }
        }
    }
}
我更改了string
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
,我认为它会有所帮助。

不要使用单引号'@Search',因为它在这里像变量一样工作。

不要使用单引号'@Search',因为它在这里像变量一样工作。

必须热爱互联网:-注意,没有人在标题中有
@Search
。我认为这是一个该死的耻辱,也表明我们的电影制作人所受的教育是多么少。“搜索斯波克”的标题比没有“必须热爱互联网”的标题要好得多:-但是,请注意,标题中没有
@Search
。我认为这是一个该死的耻辱,表明我们的电影制作人所受的教育是多么少。@Search for Spock比没有@要好得多。该标题处于禁用状态-您从未在SqlConnection上设置参数-以防您不知道SqlConnection和SqlCommand之间存在差异。该标题处于禁用状态-您从未在SqlConnection上设置参数-以防您不知道存在差异在SqlConnection和SqlCommand之间。