2011-10-04 70 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