2016-03-29 9 views
0

NHibernate経由でストアドプロシージャを呼び出す方法がわかりません。だから私は以下のように検索し、コード化した。しかし、私はエラーを得たルーチンのC#Nhibernateでmysqlストアドプロシージャを実行できません

OUTまたはINOUT引数3は、ストアド・プロシージャ

BEFOREトリガー内の変数またはNEW疑似変数ではありません。

DELIMITER $$ 
USE ih$$ 
DROP PROCEDURE IF EXISTS ms_getDate$$ 
CREATE [email protected]% PROCEDURE ms_getDate(OUT datetype VARCHAR(2)) 
BEGIN 
    SET datetype = 0; 
    SELECT a.Type into datetype 
    FROM hr_employees a WHERE a.Flag= '1'; 
END$$ 
DELIMITER; 

C#

NHibernate

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > 
    <sql-query name="ms_getDate" callable="true" > 
    <return-scalar column="datetype" type="String" /> 
    call ms_getDate 
    </sql-query> 
</hibernate-mapping> 

コード

public class At_InsertPlanningStoredProcedure 
{ 
    public virtual int datetype { get; set; } 
} 

using (DbSession dbSession = new DbSession()) 
{ 
try 
    { 
    IQuery query = dbSession.session.GetNamedQuery("at_insertplanning"); 
    At_InsertPlanningStoredProcedure a = query.UniqueResult<At_InsertPlanningStoredProcedure>(); 
    }catch (Exception ex){} 

} 
あなたはパラメータを削除し、ちょうど使用して値を返す必要が

答えて

0

:現在

CREATE [email protected]% PROCEDURE ms_getDate() 
BEGIN 
    SELECT a.Type as datetype 
    FROM hr_employees a WHERE a.Flag= '1'; 
END 

、あなたがTHIを持っていますsをパラメータとして使用しますが、プロシージャを呼び出すときにプロシージャを指定しないでください。

いつものように、NHProfilerを使用していれば、簡単に見つけたはずです。

関連する問題