/ / Nhibernate CreateSQLQuery Stored Procedure-Ergebnis für nicht zugeordnete Klasse - asp.net-mvc, nhibernate, Stored-Procedures, hql

Ergebnis der gespeicherten Prozedur von CreateSQLQuery in nicht zugeordneter Klasse - asp.net-mvc, nhibernate, gespeicherte Prozeduren, hql

In meiner Anwendung möchte ich Daten von einemgespeichert prozediert, wo die Tabelle nicht in der Anwendung zugeordnet ist. In dieser gespeicherten Prozedur habe ich den Spaltennamen Aliase hinzugefügt, die auf die Eigenschaften in meiner Klasse reagieren.

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();

Klasse:

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; }
}

Ergebnis der gespeicherten Prozedur in MS SQL Management Studio:

sp Ergebnis

Ich kann das ausführen:

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

Aber wenn ich den zuerst erwähnten HQL-Code ausführe, bekomme ichDieser Fehler: {"konnte nicht ausgeführt werden queryrn [exec PER_PrikklokSaldi @ p0 @ p1 @ p2] rn Name: IDPers - Wert: 827 Name: jaar - Wert: 2014 Name: maand - Wert: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p2] "}

InnerException: {"Falsche Syntax in der Nähe von" @ p1 "."}

Antworten:

6 für die Antwort № 1

Die Antwort ist in der Ausnahme verborgen (und meistens in diesem Teil: "Falsche Syntax in der Nähe von" @ p1 "."):

{"konnte queryrn [exec PER_PrikklokSaldi @ p0 nicht ausführen @ p1 @ p2] rn Name: IDPers - Wert: 827 Name: jaar - Wert: 2014 Name: maand - Wert: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p2] "}

Die Parameter sollten durch Komma getrennt werden:

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

oder vielleicht doch lieber so (für SQL Server)

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

Um dies stattdessen auszuführen

exec PER_PrikklokSaldi @ p0, @ p1, @ p2


0 für die Antwort № 2

Diese Lösung funktioniert jetzt! Ich erhalte eine Liste der ClockInfoData-Objekte mit den richtigen Werten aus der gespeicherten Prozedur.

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();