• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.net使用mysql数据库,OUTparameter返回值为null的bug

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

简单的表述就是

你有一个存储过程,有一个out的返回值,并且,你还有一个select的记录集,你希望在.net里面执行ExecuteReader,然后通过Parameters[3].Value 这样来获得那个out的返回值,但是坑爹的就是显示为个null

而且明明在mysql里面用call存储过程的方式,明明就是有out的返回值,但是到了.net里面就是读不出来,坑爹啊··

 

更奇怪的是,如果你用的是 ExecuteNonQuery 这种(也就是你的存储过程,只有一个 out,没有select记录集,只是做delete或者是update),那out就又有可以读出来了···

 

很多人也碰到了类似的问题

1:http://forums.asp.net/t/1354543.aspx/1?How+to+get+OUT+parameter+from+MySQL+stored+procedure

2:http://bugs.mysql.com/bug.php?id=14836

 

那么如何解决呢?解决方法就是不要用out 了,而是直接返回两个记录集,然后分别去读取就OK了

DELIMITER $$

USE `jxtdata`$$

DROP PROCEDURE IF EXISTS `fn_j_authenticate`$$

CREATE DEFINER=`root`@`%` PROCEDURE `fn_j_authenticate`(p_Mobile VARCHAR(64),p_Password VARCHAR(64),p_UserType INT)
BEGIN
DECLARE p_Error INT DEFAULT 1; -- 默认为 有错
IF (p_UserType=1) THEN  -- 1家长,2为老师
	DROP TEMPORARY TABLE IF EXISTS tmb_authenticate;
	CREATE TEMPORARY TABLE tmb_authenticate SELECT `Fid` FROM `tb_ci_relative` WHERE `Mobile`= p_Mobile   AND `Password` = p_Password;
ELSEIF (p_UserType=2) THEN
	DROP TEMPORARY TABLE IF EXISTS tmb_authenticate;
	CREATE TEMPORARY TABLE tmb_authenticate SELECT `TId`,`SchoolId`  FROM `tb_ci_teacher` WHERE `Mobile`= p_Mobile  AND `Password` =p_Password;	
END IF;
	IF(SELECT COUNT(*)>0 FROM tmb_authenticate) THEN -- 如果这里的值为0  表示用户名和密码不匹配
		SET p_Error=0;
		SELECT p_Error;
		SELECT * FROM tmb_authenticate;
	ELSE
		SET p_Error=1;
		SELECT p_Error;
	END IF;	
    END$$

DELIMITER ;

 

上面的这个存储过程,我是绝对会返回SELECT p_Error; 但是不一定返回 SELECT * FROM tmb_authenticate;

那么我们的前台如何读取呢? 用 read 先读取第一个记录集,然后再用  nextResult来读取第二个即可


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.netmvc上传下载文件的几种方式发布时间:2022-07-10
下一篇:
ASP.NETUrlRewrite简单学习总结(转)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap