2

我有一个项目使用 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

提前致谢。

4

1 回答 1

1

Projections.Constant(s, NHibernateUtil.AnsiString)也许?

于 2012-11-13T20:57:36.330 回答