我不知道如何通过NHibernate调用存储过程。所以我搜索和编码如下。但是我收到了错误
例程的OUT或INOUT参数3不是BEFORE触发器中的变量或NEW伪变量
存储过程:
DELIMITER $$
USE ih$$
DROP PROCEDURE IF EXISTS ms_getDate$$
CREATE DEFINER=root@% 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 :(得分:0)
您需要删除参数并使用以下命令返回值:
CREATE DEFINER=root@% PROCEDURE ms_getDate()
BEGIN
SELECT a.Type as datetype
FROM hr_employees a WHERE a.Flag= '1';
END
目前,您已将此作为参数,但在调用该过程时,您不会指定它。
像往常一样,如果您使用过NHProfiler,您可以自己轻松找到它。