/ / Результат збереженої процедури Nhibernate CreateSQLQuery до не зіставленого класу - asp.net-mvc, nhibernate, збережені процедури, hql

Результат Nhibernate CreateSQLQuery Stored Procedure для невідкладеного класу - asp.net-mvc, nhibernate, storage-procedure, hql

У своїй програмі я хочу отримувати дані ззберігається процедурно, коли таблиця не відображається у програмі. У цій збереженій процедурі я додав псевдоніми до імен стовпців, які відповідають властивостям мого класу.

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

Клас:

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

Результат збереженої процедури в MS SQL Management Studio:

sp результат

Я можу запустити це:

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

Але коли я запускаю перший згаданий код HQL, я отримуюця помилка: {"не вдалося виконати queryrn [exec PER_PrikklokSaldi @ p0 @ p1 @ p2] rn Ім'я: IDPers - Значення: 827 Ім'я: jaar - Значення: 2014 Назва: maand - Значення: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p2] "}

InnerException: {"Неправильний синтаксис біля" @ p1 "."}

Відповіді:

6 за відповідь № 1

Відповідь прихована у винятку (і переважно в цій частині: "Неправильний синтаксис біля" @ p1 "."):

{"не вдалося виконати запит [exec PER_PrikklokSaldi @ p0 @ p1 @ p2] rn Ім'я: IDPers - Значення: 827 Ім'я: jaar - Значення: 2014 Назва: maand - Значення: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p2] "}

Параметри слід розділяти комами:

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

а може, скоріше це (для SQL-сервера)

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

Щоб виконати це замість цього

exec PER_PrikklokSaldi @ p0, @ p1, @ p2


0 для відповіді № 2

Це рішення працює зараз! Я отримую список об’єктів ClockInfoData з правильними значеннями із збереженої процедури.

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