C# SQLDataSource=“过程或函数[Name]指定的参数太多。”
我不确定是它的asp:SqlDataSource控件还是我正在使用的DevExpress中的ASPxTreeList,但在尝试使用Insert方法启动存储过程时,我遇到了一个奇怪的错误 添加节点时,我尝试将节点插入数据库C# SQLDataSource=“过程或函数[Name]指定的参数太多。”,c#,sql-server,devexpress,sqldatasource,treelist,C#,Sql Server,Devexpress,Sqldatasource,Treelist,我不确定是它的asp:SqlDataSource控件还是我正在使用的DevExpress中的ASPxTreeList,但在尝试使用Insert方法启动存储过程时,我遇到了一个奇怪的错误 添加节点时,我尝试将节点插入数据库 protected void TagList_NodeInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) { SqlDataTagging.Inser
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,它会工作的
有没有人有什么想法或其他选择让我可以使用存储过程
感谢假设您有ID为SqlDataTagging的SqlDataSource来填充树节点,如果方法多次激发,则会发生错误,因此在某一点上,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");
...
相关问题:
类似的方法小心sp_uuuuu前缀:感谢您的警告,当我更改名称时仍然会出现相同的错误,但需要在将来考虑。发生这种情况时是否会再次调用标记列表_uuuuuunodeinserting?如果是,它是同一个参数集合对象吗?如果是这样,您是否在通话前清理收款?即使您正在清除集合,也要实例化一个新的集合。否,存储过程实际上会触发,但AspxTreelist返回时说,过程或函数sp_InsertTag指定的参数太多。总是