在NHibernate中给出sql表达式中的参数

时间:2013-04-24 04:04:57

标签: nhibernate collation

我想在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。我无法在数据库级别更改列的排序规则,因为该列包含两种语言的数据。

1 个答案:

答案 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注入攻击。