关于MYSQL存储过程找不到的问题???

张沛洁 2011-12-09 12:37:56
开发平台:VS2008(C#),MySQL Community Server 5.5.18

myCmd.Connection = OpenMySqlConn();
myCmd.CommandType = CommandType.StoredProcedure;
myCmd.CommandText = sSPName;
myCmd.ExecuteNonQuery();

执行时老是说找不到sSPName这个存储过程名,这是怎么回事?
...全文
696 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南野鹤 2013-10-11
  • 打赏
  • 举报
回复
引用 14 楼 Jason_Zhang 的回复:
困饶我的问题终于解决了,虽然问题解决但是有些想不通,希望有知道的人能跟我解释解释,那就不胜感激了. 是这样的,在我的连接字符串中数据库名是用大写的,但MySQL数据库名实际是小写的.我做一般的数据库表格查询,更新,删除都没有问题,但是我调用存储过程时它就严格区分大小写,总是提示在数据库中找不到这个存储过程. 顺便说一下跟数据库版本没有关系,因为我下载了最新的5.5.18版本也有这个问题?难道这是MySql的bug?????
我仔细核对了,我的完全一致,还是出这个问题,咋办呢?
ddcel 2012-10-25
  • 打赏
  • 举报
回复
找到了,还得回复
张沛洁 2011-12-12
  • 打赏
  • 举报
回复
自己顶一下
张沛洁 2011-12-11
  • 打赏
  • 举报
回复
困饶我的问题终于解决了,虽然问题解决但是有些想不通,希望有知道的人能跟我解释解释,那就不胜感激了.
是这样的,在我的连接字符串中数据库名是用大写的,但MySQL数据库名实际是小写的.我做一般的数据库表格查询,更新,删除都没有问题,但是我调用存储过程时它就严格区分大小写,总是提示在数据库中找不到这个存储过程.
顺便说一下跟数据库版本没有关系,因为我下载了最新的5.5.18版本也有这个问题?难道这是MySql的bug?????
张沛洁 2011-12-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 acmain_chm 的回复:]
myCmd.CommandText = sSPName;

猜不出你的sSPName;内容是什么,无法分析。 想办法尽可能多的提供信息以便他人分析。

你在命令行执行的语句是什么? 完整的错误信息是什么?


问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)
[/Quote]
sSPName就是上面存储过程的名字即sp_UpdateProdRecords,我在命令行中输入call sp_UpdateProdRecords没有错误.
WWWWA 2011-12-09
  • 打赏
  • 举报
回复
连接是否正确,是否存在此SP
ACMAIN_CHM 2011-12-09
  • 打赏
  • 举报
回复
或者直接

myCmd.Connection = OpenMySqlConn();
myCmd.CommandText = "call myproc()";
myCmd.ExecuteNonQuery();
ACMAIN_CHM 2011-12-09
  • 打赏
  • 举报
回复
断点调试,看一下你的sSPName的实际内容是什么? 另外注意大小写。
ACMAIN_CHM 2011-12-09
  • 打赏
  • 举报
回复
myCmd.CommandText = sSPName;

猜不出你的sSPName;内容是什么,无法分析。 想办法尽可能多的提供信息以便他人分析。

你在命令行执行的语句是什么? 完整的错误信息是什么?


问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
张沛洁 2011-12-09
  • 打赏
  • 举报
回复
没有人能够解答这个问题呀???
张沛洁 2011-12-09
  • 打赏
  • 举报
回复
在命令行执行结果显示错误提示是我的参数个数不匹配,因为我的存储过程带了一些输入参数。这证明可以找到这个存储过程。
这是我的存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_UpdateProdRecords`(IN childsn varchar(45),IN prdid varchar(45),IN prdver varchar(45),IN prdrev varchar(45),IN parsn varchar(45),IN childsid int,IN parsid int,IN uid varchar(45),IN orderid int,OUT rtnvalue varchar(255))
BEGIN
declare iResult int default 0;
select count(*) into iResult from prodrecords where psn=parsn and pstaid=parsid and ispass='1';
if iResult=0 then
set rtnvalue='previous step not process';
else
select count(*) into iResult from prodrecords where sn=childsn and staid=childsid and psn=parsn and ispass='1';
if iResult=1 then
set rtnvalue='current step process';
else
insert into prodrecords (sn,pid,pver,prev,psn,staid,pstaid,uid,mdate,ispass,ordid) values (childsn,prdid,prdver,prdrev,parsn,childsid,parsid,uid,now(),'1',orderid);
set rtnvalue='true';
end if;
end if;
END
ACMAIN_CHM 2011-12-09
  • 打赏
  • 举报
回复
[Quote]sSPName是我传的存储过程的名字,名字打小写绝对是与MySQL数据库中的名字是一样的。会不会是这个数据库版本不支持存储过程呀??因为我这个是Community Server而不是Enterprise和Standard[/Quote]

直接到MYSQL命令行工具中试一下。
WWWWA 2011-12-09
  • 打赏
  • 举报
回复
你的代码是什么
在MYSQL命令行下,能否调用 此SP
张沛洁 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwa 的回复:]

连接是否正确,是否存在此SP
[/Quote]
链接不会有问题,都是用相同的连接,我插入更新表格都是没有问题的。
张沛洁 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]

或者直接

myCmd.Connection = OpenMySqlConn();
myCmd.CommandText = "call myproc()";
myCmd.ExecuteNonQuery();
[/Quote]
使用这个,还是说找不到这个存储过程耶,顺便说一下,我这个存储过程带参数的。郁闷呀,搞一天了呀。
WWWWA 2011-12-09
  • 打赏
  • 举报
回复
版本支持SP的
张沛洁 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]

断点调试,看一下你的sSPName的实际内容是什么? 另外注意大小写。
[/Quote]
sSPName是我传的存储过程的名字,名字打小写绝对是与MySQL数据库中的名字是一样的。会不会是这个数据库版本不支持存储过程呀??因为我这个是Community Server而不是Enterprise和Standard

57,065

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧