/ / Nhibernate CreateSQLQuery Resultado del procedimiento almacenado en una clase no asignada - asp.net-mvc, nhibernate, de procedimientos almacenados, hql

Resultado del procedimiento almacenado de Nhibernate CreateSQLQuery en una clase no asignada - asp.net-mvc, nhibernate, procedimientos almacenados, hql

En mi aplicación quiero obtener datos de unalmacenado procesado donde la tabla no está asignada en la aplicación. En este procedimiento almacenado agregué alias a los nombres de columna que responden a las propiedades de mi clase.

HQL:

return Session.CreateSQLQuery("exec PER_PrikklokSaldi :IDPers :jaar :maand")
.AddScalar("Description", NHibernateUtil.String)
.AddScalar("StartSaldo", NHibernateUtil.Int32)
.AddScalar("Plus", NHibernateUtil.Int32)
.AddScalar("Minus", NHibernateUtil.Int32)
.AddScalar("EndSaldo", NHibernateUtil.Int32)
.SetParameter("IDPers", _employeeId)
.SetParameter("jaar", _year)
.SetParameter("maand", _month)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(ClockInfoSaldi)))
.List<ClockInfoSaldi>()
.ToList();

Clase:

public class ClockInfoSaldi
{
public string Description { get; set; }
public int StartSaldo { get; set; }
public int Plus { get; set; }
public int Minus { get; set; }
public int EndSaldo { get; set; }
}

Resultado del procedimiento almacenado en MS SQL Management Studio:

resultado sp

Puedo ejecutar esto:

var test = Session.CreateSQLQuery("exec PER_PrikklokSaldi :IDPers :jaar :maand")
.SetParameter("IDPers", _employeeId)
.SetParameter("jaar", _year)
.SetParameter("maand", _month)

Pero cuando ejecuto el primer código HQL mencionado, obtengoeste error: {"no se pudo ejecutar queryrn [exec PER_PrikklokSaldi @ p0 @ p1 @ p2] rn Nombre: IDPers - Valor: 827 Nombre: jaar - Valor: 2014 Nombre: maand - Valor: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p2] "}

InnerException: {"Sintaxis incorrecta cerca de" @ p1 "."}

Respuestas

6 para la respuesta № 1

La respuesta está oculta en la excepción. (y principalmente en esta parte: "Sintaxis incorrecta cerca de" @ p1 "."):

{"no se pudo ejecutar queryrn [exec PER_PrikklokSaldi @ p0 @ p1 @ p2] rn Nombre: IDPers - Valor: 827 Nombre: jaar - Valor: 2014 Nombre: maand - Valor: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p2] "}

Los parámetros deben dividirse por comas:

var test = Session.CreateSQLQuery("exec PER_PrikklokSaldi :IDPers, :jaar, :maand")
.SetParameter("IDPers", _employeeId)
.SetParameter("jaar", _year)
.SetParameter("maand", _month)

o tal vez más bien esto (para el servidor sql)

"exec PER_PrikklokSaldi @IDPers=:IDPers, @jaar=:jaar, @maand=:maand"

Para ejecutar esto en su lugar

ejecutivo PER_PrikklokSaldi @ p0, @ p1, @ p2


0 para la respuesta № 2

¡Esta solución funciona ahora! Obtengo una lista de objetos ClockInfoData con los valores correctos del procedimiento almacenado.

return Session.CreateSQLQuery("exec PER_PrikklokData :IDPers, :jaar, :maand")
.SetParameter("IDPers", _employeeId)
.SetParameter("jaar", _year)
.SetParameter("maand", _month)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(ClockInfoData)))
.List<ClockInfoData>()
.ToList();