none
偶尔会出现:为过程或函数“某个存储过程”指定了过多的参数。 RRS feed

  • 问题

  • 偶尔会出现:

    为过程或函数“某个存储过程”指定了过多的参数。

    或者是:

    过程或函数 “某存储过程”需要参数 '@某个参数',但未提供该参数。

    ————————————————————————————————————————

    一,发生的概率是大概执行20次左右,发生一次。

    二,每次都是在SqlHelper这个类里。

    三,不是锁定在一个函数里,而是SqlHelper里的几个调用数据库的方法都偶尔会发生这个错误。

    四,我在
                finally
                {
                    cmd.Parameters.Clear();
                }已经清空了参数了呀。

    五,错误是发生在用户一登陆之后,需要检索一批数据呈现给用户。用户并未输入数据,因此不存在参数里有非法字符的问题。

    六,以前一个朋友说过用静态方法太频繁有可能导致,是这样的吗?

    ————————————————————

    十分感谢了,问了好多人都没解决。
    视别人的帮助为恩赐~
    2009年7月15日 7:03

答案

  • 二,我以前用的cmd.Parameters是清空的,这次我每次都初始化了

    传入的list<Parameter>,应该使用的时候初始化,而不是清空,现在好像已经没这个问题了。

    原来是清空的,

    list<Parameter> list = new list<Parameter>

    list.clear();//before i clear it.

    list = new list<parameter> // now i init it. that is correct maybe.


    视别人的帮助为恩赐~
    • 已标记为答案 woodynet 2009年7月17日 3:41
    2009年7月17日 3:40

全部回复

  • 你好,根据我以前的经验,如果参数值赋值为空 那么传输到数据库服务器端就会提示这个参数不存在
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月15日 7:09
    版主
  • 如果指定的参数是没有问题的话,这个可能是在公用类中上次的参数没有清掉,尝试每次都使用新的 Command 或 在添加参数前先 cmd.Parameters.Clear();

    知识改变命运,奋斗成就人生!
    2009年7月15日 7:42
    版主
  • 你好,这个问题出现的原因是执行存储过程的时候Cmd的参数与数据中存储过程的参数个数不一致。请检查添加参数时,是否存在以前的参数没有清除,出现过程或函数“某个存储过程”指定了过多的参数。 或者过早清除参数出现过程或函数 “某存储过程”需要参数 '@某个参数',但未提供该参数。
    邹俊才
    2009年7月15日 8:32
    版主
  • 你好,根据我以前的经验,如果参数值赋值为空 那么传输到数据库服务器端就会提示这个参数不存在
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond

    谢谢你的回复,我注意观察了,没有参数为空的呀,发生错误的几个调用存储过程,参数都有默认值的。
    视别人的帮助为恩赐~
    2009年7月15日 8:38
  • 如果指定的参数是没有问题的话,这个可能是在公用类中上次的参数没有清掉,尝试每次都使用新的 Command 或 在添加参数前先 cmd.Parameters.Clear();

    知识改变命运,奋斗成就人生!

    添加参数前,cmd.Parameters.Clear()

    而不是之后吗?哦,我试试呀。

    我是在 finally
                {
                    cmd.Parameters.Clear();
                }已经清空了参数了呀。

    谢谢呀,我试试去,看还有问题没了

    视别人的帮助为恩赐~
    2009年7月15日 8:39
  • 你好,这个问题出现的原因是执行存储过程的时候Cmd的参数与数据中存储过程的参数个数不一致。请检查添加参数时,是否存在以前的参数没有清除,出现过程或函数“某个存储过程”指定了过多的参数。 或者过早清除参数出现过程或函数 “某存储过程”需要参数 '@某个参数',但未提供该参数。
    邹俊才
    估计问题还是出现在清空参数上,可是不知道问题出在哪个具体位置,我再找找,谢谢

    视别人的帮助为恩赐~
    2009年7月15日 8:40
  • 如果你的方法是静态的,Command 又是公用的,访问较频繁,有可以在上一个 cmd.Parameters.Clear(); 还未执行时,下一个 Command 已经添加好参数提交了。所以最好还是每一次使用一个新的 Command
    知识改变命运,奋斗成就人生!
    2009年7月15日 8:43
    版主
  • 你好,楼主,问题解决了吗?知道问题所在就好解决。如果还有问题,可以把代码贴出来看看!
    邹俊才
    2009年7月15日 9:48
    版主
  • 谢谢你们呀,

    一,之前那个cmd.Parameters.Clear();我已经使用过了。

    二,我以前用的cmd.Parameters是清空的,这次我每次都初始化了

    由于错误是随机的,我正在测试中,如果两天不出问题,我就告诉大家问题的根源在哪儿,

    再次感谢大家。

    视别人的帮助为恩赐~
    2009年7月16日 0:35
  • 二,我以前用的cmd.Parameters是清空的,这次我每次都初始化了

    传入的list<Parameter>,应该使用的时候初始化,而不是清空,现在好像已经没这个问题了。

    原来是清空的,

    list<Parameter> list = new list<Parameter>

    list.clear();//before i clear it.

    list = new list<parameter> // now i init it. that is correct maybe.


    视别人的帮助为恩赐~
    • 已标记为答案 woodynet 2009年7月17日 3:41
    2009年7月17日 3:40