sqlserver 模糊查询 返回

用户需要在搜索框输入通配符实现查询。目前可用的StartsWith,EndsWith需要在程序去判断。自定义SqlFunc存在Sql注入风险。有没有一种方法,可以生成参数化 like。
例如用户搜索 name=【测试】,sql语句是 name like '测试'
搜索【%测试】,sql语句是 name like '%测试'
搜索【测试%】,sql语句是 name like '测试%'
热忱回答(8)
-
fate sta VIP0
2022/11/29自定义SqlFunc存在Sql注入风险 ,这个是错误的,自定义的sqlfunc也参数化的
0 回复 -
fate sta VIP0
2022/11/29不存在注入风险
0 回复 -
fate sta VIP0
2022/11/29动态的你可以看表格查询
0 回复 -
fate sta VIP0
2022/11/29https://www.donet5.com/Home/Doc?typeId=2314
0 回复 -
Alex Mercer VIP0
2022/11/29@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 VIP0
2022/11/29expInfo.Args[1].MemberName} 你看一下是不是有membername
0 回复 -
fate sta VIP0
2022/11/29MemberValue 表式是值 MemberName是参数名
0 回复 -
Alex Mercer VIP0
2022/11/29@fate sta:感谢大佬帮忙解决。
改成这样就可以了。
return $"{expInfo.Args[0].MemberName} like {expInfo.Args[1].MemberName} ";
0 回复