我有一个项目使用 NHibernate 2.1.2.4000 和 .Net OracleClient,连接到旧的 Oracle 8i 生产数据库。我已经实现了一个 ICriteria,它正在生成正确的查询,但是引发了以下内部异常:System.Data.OracleClient.OracleException: ORA-12704: character set mismatch。
return Session.
CreateCriteria<Carrera>().
SetProjection(Projections.SqlFunction("concat", NHibernateUtil.AnsiString, Projections.Property("Descripcion"), Projections.Constant(s), Projections.Property("Id"))).
Add(Expression.InsensitiveLike("Descripcion", filter.Trim(), MatchMode.Anywhere)).
SetMaxResults(cant).
List<String>();
我的问题是:如何在 Projections.Constant(object, IType) 的参数中声明 IType AnsiString?我认为这可能会解决问题。我已经测试过删除 Projections.Constant(),一切正常。
示例生成的查询:
select
*
from
( SELECT
(this_.CARR_DESCRIPCION||:p0||this_.CARR_CODIGO) as y0_
FROM
CARRERAS this_
WHERE
lower(this_.CARR_DESCRIPCION) like :p1 )
where
rownum <=:p2;
:p0 = ', código: ', :p1 = '%2451%', :p2 = 20
提前致谢。