我想在NHibernate的查询中使用排序规则,显然唯一的方法(至少从我发现的方法)是通过添加sql表达式(Can I customize collation of query results in nHibernate?)
所以我有类似
的东西c.Add(Expression.Sql("Title COLLATE Divehi_90_BIN2 LIKE ?",
title,
NHibernateUtil.String))
然而,这与确切的字符串匹配,我想在两边都使用%。
Title COLLATE Divehi_90_BIN2 LIKE %?%
给了我一个错误,
但是在标题上填充它:"%" + title + "%"
有效。
我的问题是 - 有没有办法在Expression.Sql中正确提供参数,因为在双方使用%看起来像一个安全漏洞 - 我正在邀请查询注入。
PS。我无法在数据库级别更改列的排序规则,因为该列包含两种语言的数据。
答案 0 :(得分:3)
问题是%@p0%
不是带引号的字符串,即'%@p0%'
。
从NHibernate documentation来看,这似乎是推荐的形式。
Expression.Sql("Title COLLATE Divehi_90_BIN2 LIKE ?",
String.Format("%{0}%", title),
NHibernateUtil.String)
请注意,字符串String.Format("%{0}%", title)
将作为参数传入,因此您不会通过此方法邀请sql注入攻击。