2011-10-04 78 views
0

我有直接测试存储过程和它的作品,但是当我从代码中调用它,我得到的错误:错误与存储过程(参数有关)

“过程或函数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个参数(ⅰ手动添加的那些)。当它实际上具有比它需要的LESS参数更多的参数时,它怎么可能会给我一个错误的参数?或者我只是看错了地方?我查看了UpdateParameters ==> base ==> count,其中包含5.

感谢您的帮助。

+3

这将是更容易帮助,如果你发布的代码。 –

+2

我们可以看到你如何调用sproc吗?额外的参数是不允许的,因为你已经发现:)。如果您正在重新使用某个命令,请在添加参数之前执行.Parameters.Clear()。 – DaveHogan

+0

http://forums.asp.net/t/1000526.aspx/1 –

回答

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 
+0

我更新了主帖,请大家看看。 – TheGateKeeper