SQLDataSource = "Procedure or function [Name] has too many arguments specified."

SQLDataSource = "Procedure or function [Name] has too many arguments specified."

我不确定它的 asp:SqlDataSource 控件还是我正在使用的来自 DevExpress 的 ASPxTreeList,但是在尝试使用 [=16= 触发存储过程时我遇到了一个奇怪的错误]方法。

添加节点时我尝试将节点插入数据库

   protected void TagList_NodeInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
    {
        SqlDataTagging.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;
        SqlDataTagging.InsertParameters.Add("ParentID", e.NewValues["ParentTag_ID"].ToString());
        SqlDataTagging.InsertParameters.Add("TagName", e.NewValues["TagName_VC"].ToString());
        SqlDataTagging.InsertParameters.Add("UserID", "1");

        SqlDataTagging.InsertCommand = "sp_InsertTag";

        SqlDataTagging.Insert();
    }

然而,当我触发上面的代码时,我得到了这个错误

Procedure or function sp_InsertTag has too many arguments specified.

我的SPheader

ALTER PROCEDURE [dbo].[sp_InsertTag] (@ParentID INT, @TagName VARCHAR(100), @UserID int)

但是如您所见,SP 中有 3 个参数,C# 代码中有 3 个参数。

奇怪的是,如果我实际上 运行 SQL 通过文本

SqlDataTagging.InsertCommandType = SqlDataSourceCommandType.Text; 

并用 C# 编写 SQL,它会工作...

任何人有任何想法或任何替代方案以便我可以使用存储过程?

谢谢

假设您有 SqlDataSource 和 ID SqlDataTagging 来填充树节点,如果 TagList_NodeInserting 方法触发不止一次,就会发生错误,因此在特定点 InsertParameters 集合使用存储过程中指定的 3 个以上参数进行填充。

为了减轻这种行为,我建议您在添加如下参数之前清除 InsertParameters 集合:

...
SqlDataTagging.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataTagging.InsertParameters.Clear(); // add this line to clear InsertParameters collection before adding parameters
SqlDataTagging.InsertParameters.Add("ParentID", e.NewValues["ParentTag_ID"].ToString());
SqlDataTagging.InsertParameters.Add("TagName", e.NewValues["TagName_VC"].ToString());
SqlDataTagging.InsertParameters.Add("UserID", "1");
...

相关问题:

ASPxTreeList - The 'Procedure or function [name] has too many arguments specified' exception is raised when a node is deleted(类似方法)