C#无法通过Nhibernate执行mysql存储过程

时间:2016-03-29 05:01:49

标签: c# mysql stored-procedures nhibernate

我不知道如何通过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){}

 }

1 个答案:

答案 0 :(得分:0)

您需要删除参数并使用以下命令返回值:

CREATE DEFINER=root@% PROCEDURE ms_getDate()
BEGIN
    SELECT a.Type as datetype 
    FROM hr_employees a WHERE a.Flag= '1';
END

目前,您已将此作为参数,但在调用该过程时,您不会指定它。

像往常一样,如果您使用过NHProfiler,您可以自己轻松找到它。