Heim >Datenbank >MySQL-Tutorial >为过程或函数指定了过多的参数
总结刚结束的机房合作只有一种感觉那就是:好多好多东西自己都不会,又有好多东西在这次合作中学到了,总之就是痛并快乐着! 接下来就谈谈在退卡时调用存储过程PROC_ReturnCard时出现错误及解决过程。图如下: 刚开始的时候就考虑到D层的参数是不是写的过多
总结刚结束的机房合作只有一种感觉那就是:“好多好多东西自己都不会,又有好多东西在这次合作中学到了,总之就是痛并快乐着!”
接下来就谈谈在退卡时调用存储过程PROC_ReturnCard时出现错误及解决过程。图如下:
刚开始的时候就考虑到D层的参数是不是写的过多了,于是在数据库中查几遍参数都一样啊!为什么就是不行呢?于是上网查了下:有以下几种情况
一、如果你的参数添加是在循环体内完成第2次时就会重复添加,此时触发参数过多异常
解决方法1,参数在循环体外添加,for内部只赋值和取返回值
解决方法2,每次循环清空参数Parameters.Clear();
二、普通调用
1、存储过程调用错了(一般是存储过程名字字母错误)。
2、用户创建的存储过程与系统存储过程同名。如果以sp开头,用户创建的存储过程,总会先检查master数据库(即使该存储过程已用数据库名称限定)。 如果用户创建的存储过程与系统存储过程同名,则永远不执行用户创建的存储过程 ,因此自定义存储过程不要与系统存储过程同名
3、超过指定的参数。以上情况你的代码中均没有出现,目前最大的可能性是你连接的数据库中存储过程中的参数确实没有那么多,而你改的是另一个数据库中的存储过程!
4、清空参数Parameters.Clear();
由于我的属于第二种情况经过以上的排查感觉,第一种存储过程名称写错绝对不可能(自我感觉良好)第二种也排除,因为我严格按命名规范来的。第三种情况已经查过好多次数据库了没错啊!因此就开始找第四中的解决办法,结果还是不行。只好找人帮忙他在程序运行时,突然发现我调用的存储过程的名字不对,这时我立刻晕死!明明是PROC_ReturnOut 而我却写成了PROC_SelectCheckOut这么低级的错误,竟然让我忙活了一下午。更不可原谅的是自己就没有检查却肯定这是对的,没有验证就下结论,这定是死罪!
因此通过这个小小的错误,必须得做自我反思,今后在做事情的时候千万不要以“我认为、、、”来下定论。一定要经过实际排查不放过任何细节,不能凭空想象,只有做过了才有资格发表评论。就让我们以小见大来看待这个问题并做出反思!