Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储过程未返回MVC5中的值_Mysql_Stored Procedures_Asp.net Mvc 5 - Fatal编程技术网

Mysql 存储过程未返回MVC5中的值

Mysql 存储过程未返回MVC5中的值,mysql,stored-procedures,asp.net-mvc-5,Mysql,Stored Procedures,Asp.net Mvc 5,我在MVC5中工作,通过db方法使用实体框架。我使用Mysql作为数据库。我创建了一个过程,当调用Mysql中的过程时,它会按照我的期望工作。但当我在MVC中使用过程时,它每次返回0 存储过程 CREATE PROCEDURE `checkSeasonAvailability`( IN paramSeasonId INT, IN paramHotelId INT, IN paramStartDate varchar(20), IN paramEndDate

我在MVC5中工作,通过db方法使用实体框架。我使用Mysql作为数据库。我创建了一个过程,当调用Mysql中的过程时,它会按照我的期望工作。但当我在MVC中使用过程时,它每次返回0

存储过程

CREATE PROCEDURE `checkSeasonAvailability`( 
    IN paramSeasonId INT,   
    IN paramHotelId INT,
    IN paramStartDate varchar(20),
    IN paramEndDate varchar(20)
)
BEGIN
    DECLARE _startDate,_endDate DATETIME;
    DECLARE _hotelseasonID BIGINT(20);
    DECLARE _count,_rowCount,_dateDiff INT;
    DECLARE _index INT DEFAULT 1;
    DECLARE i INT DEFAULT 0;
    DECLARE cursorSeasonList CURSOR FOR SELECT `hotel_season_id`,`start_date`,`end_date`
            FROM    hotel_season_link
            WHERE   hotel_id    =   paramHotelId        &&
                    season_id   =   paramSeasonId       &&
                    active      =   TRUE;
    OPEN cursorSeasonList;
    SET _rowCount=FOUND_ROWS();
    SET _count=_rowCount;
    IF(_rowCount>0) THEN                    
        Proc:WHILE _index <= _rowCount DO
            FETCH cursorSeasonList INTO _hotelseasonID,_startDate,_endDate;
            SET _dateDiff=datediff(paramEndDate,paramStartDate);
            SET i=0;
            WHILE i <= _dateDiff DO

                SELECT COUNT(*) FROM hotel_season_link
                WHERE
                        adddate(paramStartDate,i) BETWEEN _startDate AND _endDate INTO _count;

                IF(_count>0) THEN
                    SELECT 1;
                    LEAVE Proc;     
                END IF;
                SET i=i+1;
            END WHILE;
        SET _index=_index+1;
        END WHILE;
    END IF;    
END

CALL checkSeasonAvailability(1,3,'2014-12-26 00:00:00','2014-12-31 00:00:00');//call in mysql
当我调试代码时,我发现所有必需的参数都发送成功,但我没有得到返回值。
如果我的代码有任何错误,请建议我。

我自己解决这个问题。我更改了店内程序和行动方法

String format = "yyyy-MM-dd hh:mm:ss";
System.Data.Entity.Core.Objects.ObjectParameter flag = new System.Data.Entity.Core.Objects.ObjectParameter("flag", typeof(int));
var status = db.checkSeasonAvailability(hotelSeasonId,seasonId, hotelId, startDate.ToString(format), endDate.ToString(format), flag);
我在我的过程中又添加了一个参数作为输出,并将返回值存储在此变量中

OUT Flag int

SET Flag=0;
SELECT Flag;
然后改变行动方法

String format = "yyyy-MM-dd hh:mm:ss";
System.Data.Entity.Core.Objects.ObjectParameter flag = new System.Data.Entity.Core.Objects.ObjectParameter("flag", typeof(int));
var status = db.checkSeasonAvailability(hotelSeasonId,seasonId, hotelId, startDate.ToString(format), endDate.ToString(format), flag);

看看这些资源:谢谢@迈克尔斯利