1

我想在 NHibernate 的查询中使用排序规则,显然唯一的方法(至少从我发现的)是通过添加一个 sql 表达式(我可以在 nHibernate 中自定义查询结果的排序规则吗?

所以我有类似的东西

c.Add(Expression.Sql("Title COLLATE Divehi_90_BIN2 LIKE ?", 
                     title, 
                     NHibernateUtil.String))

但是,这与确切的字符串匹配,我想在两边都使用 % 。

Title COLLATE Divehi_90_BIN2 LIKE %?%给我一个错误,

但在标题上填充它:"%" + title + "%"作品。

我的问题是 - 有没有办法在 Expression.Sql 中正确提供参数,因为在两边使用 % 看起来像一个安全漏洞 - 我正在邀请查询注入。

PS。我无法在数据库级别更改列的排序规则,因为该列包含两种语言的数据。

4

1 回答 1

3

问题是它%@p0%不是带引号的字符串,即'%@p0%'.

NHibernate 文档看来,这是推荐的形式。

Expression.Sql("Title COLLATE Divehi_90_BIN2 LIKE ?", 
               String.Format("%{0}%", title),
               NHibernateUtil.String)

请注意,字符串String.Format("%{0}%", title)将作为参数传入,因此您不会通过这种方法引发 sql 注入攻击。

于 2013-04-24T13:23:12.100 回答