2013-02-19 53 views
0

我想調用返回ClassIDStudent id存儲過程存儲過程呼叫參數化使用NHibernate

我的XML映射

<sql-query name="GetClassRevenuebyStudent_Sea"> 
    <return-scalar column="totalRevenew" type="System.String" /> 
    exec GetClassRevenue_Sea ClassID, StudentID 
</sql-query> 

而且我的存儲過程調用代碼是

public static double Student_ShowRevenue(string classid, string studentid) 
{ 
    ISession session = NHibernateHelper.GetSession(); 
    ITransaction trans = session.BeginTransaction(); 
    IQuery query = (IQuery)session.GetNamedQuery("GetClassRevenuebyStudent_Sea"); 
    query.SetParameter("ClassID", classid); 
    query.SetParameter("StudentID", studentid); 

    return Convert.ToDouble(query.List()[0]); 
} 

但是當我運行該應用程序時,它會給出例外

return Convert.ToDouble(query.List()[0]) 

所有參數都未設置。

+0

您是否嘗試過像exec Exec GetClassRevenue_Sea:ClassID,:StudentID(冒號在您的參數名稱之前)定義您的SP? – jbl 2013-02-20 09:05:52

+0

什麼樣的例外? (你能給出整個異常嗎?) – Automatico 2013-02-20 13:21:48

+0

'QueryException:所有參數都沒有設置.'類型異常。 – rae1 2013-02-20 13:30:06

回答

1

您需要將您的ClassIdStudentId性能的前一個冒號在映射,以表明他們是你要設置的參數佔位符:

<sql-query name="GetClassRevenuebyStudent_Sea"> 
    <return-scalar column="totalRevenew" type="System.String" /> 
    exec GetClassRevenue_Sea :ClassID, :StudentID <!-- notice the colon (:) --> 
</sql-query> 

,那麼你可以調用命名查詢從你的代碼,

IQuery query = session.GetNamedQuery("GetClassRevenuebyStudent_Sea") 
    .SetParameter("ClassID", classid) 
    .SetParameter("StudentID", studentid);