当前位置: 首页 > 面试题库 >

带参数的SqlCommand

戚京
2023-03-14
问题内容

我使用以下代码从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没有任何结果。

知道为什么吗?


问题答案:

“为什么?” 这是因为很少有电影的名称中带有“ @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 + "%");


 类似资料:
  • 问题内容: 我是否可以使用一组参数启动 Java WebStart 应用程序,就像用标记配置了applet一样? 谢谢 问题答案: 是的,您可以看到以下示例: 显示向您传递参数“ -user = bob”和“ -pass = 8jkaiuasu”到应用程序。以标准方式获取参数。

  • 问题内容: 我想从下面的类中调用groovy方法 所以这就是我想做的 我可以正确传递参数吗?我需要传递请帮助我使用参数调用groovy方法 错误: 更新资料 例外 问题答案: 是的…我在一个文件夹中创建了这个时髦的脚本: 在当前文件夹中,我创建了这个groovy脚本: 当我执行命令时 它输出: 更新后编辑 您收到的错误是由于Groovy解析器的工作方式引起的。。。加入字符串时,您不能将放在下一行的

  • 它不工作:(.我有这个错误 [致命]org.springframework:java-backend-bdd:0.1.0:无法将项目org.springframework.boot:spring-boot-starter-parent:POM:2.0.3.从/到central发布(https://repo.maven.apache.org/maven2):sun.security.validato

  • 在Less中,还可以像函数一样定义一个带参数的mixin, 这种形式叫做 Parametric Mixin,即带参数的混入。如: // 定义一个样式选择器 .borderRadius(@radius){     border-radius: @radius; } 然后,在其他选择器中像这样调用它: // 使用已定义的样式选择器 #header {     .borderRadius(10px)

  • 奖金f(a_3,(a_3+A_4)*4)可以捕捉所有的表达式,而不仅仅是(a_3,(a_3+A_4)?

  • 我需要制作一个程序,从命令行获取可选参数。如果显示flag,我需要读取下面的正则表达式,并将其作为字符串保存到程序中。类似于: 我现在看到的是: 但是,当我从文件夹运行程序时,其中有些文件是和,程序将打印“file1.java”。如何使用“*.java”获取变量? 当我尝试打印所有参数时,使用: 它给了我: 这让我得出结论,我需要以不同的方式阅读参数...