/ / न्हेबर्ननेट CreateSQLQuery संग्रहीत प्रक्रिया गैर-मैप वर्ग के लिए परिणाम - asp.net-mvc, nhibernate, संग्रहीत-कार्यविधियाँ, 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; }
}

एमएस SQL ​​प्रबंधन स्टूडियो में संग्रहीत प्रक्रिया परिणाम:

सपा परिणाम

मैं इसे चला सकता हूं:

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

लेकिन जब मैं पहली बार उल्लिखित एचक्यूएल कोड चलाता हूं तो मुझे मिलता हैयह त्रुटि: {"क्वेरी निष्पादित नहीं कर सकी [निष्पादन__प्रिक्क्लोक्शल्दि @ p0 @ p1 @ P2] rn नाम: IDPers - मान: 827 नाम: jaar - मूल्य: 2014 नाम: maand - मूल्य: 1rn [SQL: exec PER_PrikklokSaldi @ p0 @ p1 @ p1 @ @ P2] "}

भीतरी अपवाद: {"गलत वाक्य रचना" @ p1 "के पास।"}

उत्तर:

उत्तर № 1 के लिए 6

इसका उत्तर अपवाद में छिपा है (और ज्यादातर इस भाग में: "@ p1" के पास गलत सिंटैक्स। "):

{[मैं क्वेरी निष्पादित नहीं कर सका [PER_PrikklokSaldi @ p0 निष्पादित करें @ पी 1 @ 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"

इसके बजाय इसे निष्पादित करने के लिए

निष्पादन 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();