我不确定它是asp:SqlDataSource
控件还是我正在使用的 DevExpress 的ASPxTreeList
,但是尝试使用 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,它将起作用...
有人有任何想法或任何替代方案,以便我可以使用存储过程吗?
谢谢
假设您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 - 删除节点时引发"过程或函数 [name] 指定的参数过多"异常(类似方法(