0

我不确定它asp:SqlDataSource的控制是否是ASPxTreeList我正在使用的 DevExpress 的控制,但是当我尝试使用该Insert()方法触发存储过程时遇到一个奇怪的错误。

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

   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();
    }

但是,当我触发上述代码时,出现此错误

过程或函数 sp_InsertTag 指定的参数过多。

我的 SP 标头

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

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

奇怪的是,如果我真的通过文本运行 SQL,例如

SqlDataTagging.InsertCommandType = SqlDataSourceCommandType.Text; 

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

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

谢谢

4

1 回答 1

1

假设您有SqlDataSourceIDSqlDataTagging来填充树节点,如果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 - 删除节点时引发“过程或函数 [名称] 指定的参数过多”异常(类似方法)

于 2017-02-09T07:22:41.930 回答