存储过程出错(参数相关)

时间:2011-10-04 20:06:33

标签: asp.net sql

我有一个存储过程,我直接测试它的工作原理,但是当我从代码中调用它时,我得到了错误:

“过程或函数editItem指定了太多参数”

有人可以告诉我为什么会发生这种错误吗?是因为我的sqlDataSource是从BIND传递存储过程所需的参数吗?我认为存储过程忽略了额外的参数。

由于

编辑:以下是有关此问题的更多信息。它让我感到困惑。基本上,我有一堆项目添加到模板中,如下所示:

                           <EditItemTemplate>
                            <asp:TextBox runat="server" ID="tbEditItemDescription" Text='<%# Bind("itemDescription") %>'></asp:TextBox>
                        </EditItemTemplate>

据我所知,Bind会自动提供参数。我手动添加了5个参数,如下所示:

                <UpdateParameters>
                    <asp:ControlParameter DbType="Int16" Name="itemTypeId" ControlID="dvIndividualItem$ddlItemTypes"
                        PropertyName="SelectedValue" />
                    <asp:ControlParameter DbType="Int16" Name="itemSubTypeId" ControlID="dvIndividualItem$ddlItemSubTypes"
                        PropertyName="SelectedValue" />
                    <asp:ControlParameter DbType="Int64" Name="itemSubSubTypeId" ControlID="dvIndividualItem$ddlItemSubSubTypes"
                        PropertyName="SelectedValue" />
                    <asp:ControlParameter DbType="Int16" Name="numberOfTurns" ControlID="dvIndividualItem$tbEditEffectTurns"
                        PropertyName="Text" />
                    <asp:ControlParameter DefaultValue="0" DbType="Int64" Name="itemId" ControlID="gvItems"
                        PropertyName="SelectedDataKey.Value" />

现在当我调试sql数据源时,我发现它实际上只有5个参数(我手动添加的参数)。如果它的参数太少,当它的实际参数少于它需要的参数时,它是怎么可能的呢?或者我只是在错误的地方看?我查看了UpdateParameters ==&gt; base ==&gt; count,包含5.

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

很简单,您发送的参数多于程序所期望的参数。

具有3个参数的程序:

ALTER PROCEDURE [dbo].[GetData](
    @Arg1 VARCHAR(50),
    @Arg2 VARCHAR(50),
    @Arg3 VARCHAR(50)
)AS

包含4个参数的代码:

cmd.Parameters.Add("@Arg1", SqlDbType.VarChar).Value = "Arg1"; 
cmd.Parameters.Add("@Arg2", SqlDbType.VarChar).Value = "Arg2"; 
cmd.Parameters.Add("@Arg3", SqlDbType.VarChar).Value = "Arg3"; 
cmd.Parameters.Add("@Arg4", SqlDbType.VarChar).Value = "Arg4"; 

//execute = BANG! Procedure is not expecting @Arg4