gpt4 book ai didi

asp.net - 过程或函数指定的参数过多

转载 作者:行者123 更新时间:2023-12-04 22:11:30 24 4
gpt4 key购买 nike

我收到一个错误

Procedure or function "myStoreProcNameHere" has too many arguments specified.



下面是我的存储过程和 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>

最佳答案

我之前在循环(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();
}
}

关于asp.net - 过程或函数指定的参数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5757081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com