sqlserver 模糊查询 返回

SqlSugar
8 169

用户需要在搜索框输入通配符实现查询。目前可用的StartsWith,EndsWith需要在程序去判断。自定义SqlFunc存在Sql注入风险。有没有一种方法,可以生成参数化 like。

例如用户搜索 name=【测试】,sql语句是 name like '测试'

搜索【%测试】,sql语句是 name like '%测试'

搜索【测试%】,sql语句是 name like '测试%'

热忱回答8

  • fate sta fate sta VIP0
    2022/11/29

    自定义SqlFunc存在Sql注入风险 ,这个是错误的,自定义的sqlfunc也参数化的

    0 回复
  • fate sta fate sta VIP0
    2022/11/29

    不存在注入风险

    0 回复
  • fate sta fate sta VIP0
    2022/11/29

    动态的你可以看表格查询

    0 回复
  • fate sta fate sta VIP0
    2022/11/29

    https://www.donet5.com/Home/Doc?typeId=2314

    0 回复
  • @fate sta:大佬,请问这个怎么定义参数化值呢。我这边用的like,查看生成的sql没有参数化查询

              var expMethods = new List<SqlFuncExternal>();

                expMethods.Add(new SqlFuncExternal()

                {

                    UniqueMethodName = "FuncLike",

                    MethodValue = (expInfo, dbType, expContext) =>

                    {

                        //存在sql注入风险

                        if (dbType == DbType.SqlServer)

                            return $"{expInfo.Args[0].MemberName} like '{expInfo.Args[1].MemberValue}' ";

                        else

                            throw new Exception("未实现");

                    }

                });

                return expMethods;


    0 回复
  • fate sta fate sta VIP0
    2022/11/29

    expInfo.Args[1].MemberName} 你看一下是不是有membername

    0 回复
  • fate sta fate sta VIP0
    2022/11/29

    MemberValue 表式是值 MemberName是参数名

    0 回复
  • @fate sta:感谢大佬帮忙解决。

    改成这样就可以了。

    return $"{expInfo.Args[0].MemberName} like {expInfo.Args[1].MemberName} ";

    0 回复