2012-07-20 113 views
0

我有一個存儲過程,它帶有兩個返回int的參數。nibernate調用mysql存儲過程

我mapping.hbm.xml

<sql-query name="CreateAttribute"> 
     <query-param name="idAttrType" type="int"/> 
     <query-param name="idSystemUser" type="int"/> 
     call CreateAttribute :idAttrType,:idSystemUser 
    </sql-query> 

C#使用

var t = session.GetNamedQuery("CreateAttribute"); 
    t.SetInt32("idAttrType", 12); 
    t.SetInt32("idSystemUser",int.Parse(id)); 
    var result = t.List(); 

然後我收到了如下因素:

[SQL:??叫CreateAttribute P0,P1] --- > MySql.Data.MySqlClient.MySqlException:你的SQL語法有錯誤;

有什麼建議嗎?

回答

0

豈不是: -

<sql-query name="CreateAttribute"> 
     <query-param name="idAttrType" type="int"/> 
     <query-param name="idSystemUser" type="int"/> 
     call CreateAttribute(:idAttrType,:idSystemUser); 
    </sql-query> 

注意周圍的PARAMS括號。

編輯對你的MySql數據庫運行這個,它運行嗎?

call CreateAttribute(0,0); 
+0

試了一下。現在我得到一個:PROCEDURE sampledb.CreateAttribute不存在 – Cos 2012-07-20 11:50:02

+0

只是要清楚,我試圖替換的內聯SQL是:INSERT INTO Misc VALUES(CreateAttribute(12,$ userid),$ userid,'$ title',' $ details','$ startdate','$ enddate','$ isongoing','$ xml');「。顯然我會把這個語句分成2個部分,一個叫做程序,另一個叫插入 – Cos 2012-07-20 11:53:29

+0

請請參閱編輯 – Rippo 2012-07-20 12:02:03

0

改性該呼叫爲以下 SELECT呼叫CreateAttribute(0,0); - 它的工作

新映射現在是

<sql-query name="CreateAttribute"> 
     <query-param name="idAttrType" type="int"/> 
     <query-param name="idSystemUser" type="int"/> 
     select CreateAttribute(:idAttrType,:idSystemUser); 
    </sql-query> 
+0

我對此感興趣,因爲我只使用'調用SP_NAME(param);'調用一個MySql Sp,你可以發佈你的實際存儲過程嗎? – Rippo 2012-07-20 14:11:23

+0

因爲事實證明CreateAttribute(,)是一個函數而不是一個過程,所以它只能用在另一個語句的上下文中這種情況下選擇)。 – Cos 2012-07-30 11:28:40