2011-04-22 101 views
7

我得到過程或函數的參數太多指定

過程或函數「myStoreProcNameHere」已指定的參數太多錯誤。

下面是我的存儲過程和SqlDataSource。我正在使用GridView來編輯數據。

幫助? :(

存儲過程:

ALTER PROCEDURE UpdateTwoTables 
    (@ID int, 
    @UserID varchar(10), 
    @Pass varchar(50), 
    @Enabled int, 
    @Permission int, 
    @Rank int, 
    @FName varchar(50), 
    @LName varchar(50), 
    @Phone varchar(50), 
    @Email1 varchar(50), 
    @Email2 varchar(50) 
    ) 
AS 
BEGIN TRANSACTION 
    UPDATE tbl_user_login 
    SET UserID = @UserID, Pass = @Pass, 
     Enabled = @Enabled, Permission = @Permission, 
     Rank = @Rank 
    WHERE ID = @ID 

    IF @@ERROR <> 0 
    BEGIN 
     ROLLBACK 
     RETURN 
    END 

    UPDATE tbl_user_profile 
    SET FName = @FName, LName = @LName, 
     Phone = @Phone, Email1 = @Email1, Email2 = @Email2 
    WHERE ID = @ID 

    IF @@ERROR <> 0 
    BEGIN 
     ROLLBACK 
     RETURN 
    END 

    COMMIT 

ASP.NET SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:DBConnString %>" 
     SelectCommand="SELECT tbl_user_login.ID, tbl_user_login.UserID, tbl_user_login.Pass, tbl_user_login.Enabled, tbl_user_login.Permission, tbl_user_login.Rank, tbl_user_profile.ID AS Expr1, tbl_user_profile.FName, 
tbl_user_profile.LName, tbl_user_profile.Phone, tbl_user_profile.Email1, tbl_user_profile.Email2 FROM tbl_user_login INNER JOIN tbl_user_profile ON tbl_user_login.ID = tbl_user_profile.ID" 
     UpdateCommand="UpdateTwoTable" UpdateCommandType="StoredProcedure"> 
     <UpdateParameters> 
      <asp:Parameter Name="ID" /> 
      <asp:Parameter Name="UserID"/> 
      <asp:Parameter Name="Pass"/> 
      <asp:Parameter Name="Enabled"/> 
      <asp:Parameter Name="Permission"/> 
      <asp:Parameter Name="Rank"/> 
      <asp:Parameter Name="FName"/> 
      <asp:Parameter Name="LName"/> 
      <asp:Parameter Name="Phone"/> 
      <asp:Parameter Name="Email1"/> 
      <asp:Parameter Name="Email2"/> 
     </UpdateParameters>   
    </asp:SqlDataSource> 
+0

@Abe,Nope。不起作用:( – 2011-04-22 15:42:51

+0

看看這個:[如何解決'程序或函數具有太多的參數指定'](http://www.whitworth.org/2006/01/16/how-to-troubleshoot -procedure-or-function-has-many-arguments-specified-in-aspnet-20 /) – 2011-04-22 15:42:53

+0

@JordanArron即使鏈接不像它剛纔陳述的那樣鏈接被破壞和無用「這通常意味着它說了什麼,你的更新,刪除或插入命令試圖傳遞更多的參數比存儲的「 – Thronk 2014-07-22 14:19:06

回答

9

我,當我從調用一個循環內的存儲過程的foreach之前(就遇到了這個錯誤信息)

我收到異常的原因是由於我沒有在循環的每次迭代之後清除參數的事實

例如: 此代碼拋出:

using (SqlCommand cmd = new SqlCommand()) 
{ 
    cmd.CommandType = System.Data.CommandType.StoredProcedure; 
    cmd.CommandText = "MySproc"; 
    foreach (MyClass c in myClasses) 
    { 
     cmd.Parameters.AddWithValue("@val1", c.val1); 
     cmd.Parameters.AddWithValue("@val2", c.val2); 
     var result = MyDbManager.instance.ExecuteScalarQuery(cmd); 
    } 
} 

此修復程序是明確的參數:

using (SqlCommand cmd = new SqlCommand()) 
{ 
    cmd.CommandType = System.Data.CommandType.StoredProcedure; 
    cmd.CommandText = "MySproc"; 
    foreach (MyClass c in myClasses) 
    { 
     cmd.Parameters.AddWithValue("@val1", c.val1); 
     cmd.Parameters.AddWithValue("@val2", c.val2); 
     var result = MyDbManager.instance.ExecuteScalarQuery(cmd); 
     cmd.Parameters.Clear(); 
    } 
} 
+0

謝謝,男人!這個問題已經殺死我!!我無法弄清楚爲什麼第一個循環工作,但沒有其他人做。 – Macromika 2015-02-13 17:58:41

0

實例必須創建

Vb.Net & C#

glopal value

vb.net -> Dim cmd as New SqlCommand() 

c#-> Sqlcommand cmd=new sqlCommand() 

Con.open() 

cmd=New SqlCommand() 

something write... 

Con.Close() 
相關問題