gpt4 book ai didi

sql - Dapper 支持 like 运算符吗?

转载 作者:行者123 更新时间:2023-12-03 05:49:32 24 4
gpt4 key购买 nike

使用 Dapper-dot-net...

以下内容不会在数据对象中产生任何结果:

var data = conn.Query(@"
select top 25
Term as Label,
Type,
ID
from SearchTerms
WHERE Term like '%@T%'",
new { T = (string)term });

但是,当我只使用常规字符串格式时,例如:

string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);

我在集合中恢复了 25 行。 Dapper 是否没有正确解析参数 @T 的末尾?

最佳答案

尝试:

term = "whateverterm";
var encodeForLike = term => term.Replace("[", "[[]").Replace("%", "[%]");

string term = "%" + encodeForLike(term) + "%";
var data = conn.Query(@"
select top 25
Term as Label,
Type,
ID
from SearchTerms
WHERE Term like @term",
new { term });

like 运算符没有什么特别之处,你永远不希望参数位于字符串文字中,它们不会工作,而是会被解释为字符串。

注意

强烈建议不要使用第二个片段中的硬编码示例,它除了是 sql 注入(inject)的一个大问题之外,还可能导致 dapper 泄漏。

警告

任何以通配符开头的like匹配都不可SARGable,这意味着它很慢并且需要索引扫描。

关于sql - Dapper 支持 like 运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com