为过程或函数 ##指定的参数太多

AstaChen 2008-10-08 05:34:48
tvBaseinfoInit是用于初始化一个treeview的,但每次调用tvBaseinfoInit()都出错,错误信息:为过程或函数 pro_GoTest指定的参数太多.....
可是存储过程pro_GoTest的确是需要三个参数阿。。。。
把下面红色的那行注释的话就能执行,各位大侠,走过路过看看是啥问题。。。

protected void tvBaseinfoInit()
{
TreeNode myRoot = new TreeNode();
myRoot.Text = "基础资料";
myRoot.Value = "0";
tvBaseinfo.Nodes.Add(myRoot);

tvBaseinfoAddNode(0, myRoot);
}

// 添加子节点
protected void tvBaseinfoAddNode(int pid, TreeNode ParentNode)
{
DataSet ds = clsBaseinfo.GoTest(-100, pid, -100);
DataTable dt = ds.Tables["Baseinfo"];

for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode myNode = new TreeNode();
myNode.Text = dt.Rows[i]["display"].ToString();
myNode.Value = dt.Rows[i]["id"].ToString();

ParentNode.ChildNodes.Add(myNode);
tvBaseinfoAddNode(Convert.ToInt32(myNode.Value), myNode);
}
}

--------clsBaseinfo.GoTest
public DataSet GoTest(int id, int pid, int status)
{
SqlCommand sqlComm = da.SelectCommand;
sqlComm.CommandText = "Pro_GoTest";
sqlComm.CommandType = CommandType.StoredProcedure;

SqlParameter sqlParam = new SqlParameter("@id", SqlDbType.Int);
sqlParam.Value = id;
sqlComm.Parameters.Add(sqlParam);

sqlParam = new SqlParameter("@pid", SqlDbType.Int);
sqlParam.Value = pid;
sqlComm.Parameters.Add(sqlParam);

sqlParam = new SqlParameter("@status", SqlDbType.Int);
sqlParam.Value = status;
sqlComm.Parameters.Add(sqlParam);

DataSet ds = new DataSet();
da.Fill(ds, "Baseinfo");

return ds;
}
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AstaChen 2008-10-09
  • 打赏
  • 举报
回复
根据 JeffChung 的方法解决了。非常感谢。
JeffChung 2008-10-08
  • 打赏
  • 举报
回复

public DataSet GoTest(int id, int pid, int status)
{
SqlCommand sqlComm = da.SelectCommand;
sqlComm.CommandText = "Pro_GoTest";
sqlComm.CommandType = CommandType.StoredProcedure;

sqlComm.Parameters.Clear();//在每次使用前先将sqlComm的参数清除掉

SqlParameter sqlParam = new SqlParameter("@id", SqlDbType.Int);
sqlParam.Value = id;
sqlComm.Parameters.Add(sqlParam);

sqlParam = new SqlParameter("@pid", SqlDbType.Int);
sqlParam.Value = pid;
sqlComm.Parameters.Add(sqlParam);

sqlParam = new SqlParameter("@status", SqlDbType.Int);
sqlParam.Value = status;
sqlComm.Parameters.Add(sqlParam);

DataSet ds = new DataSet();
da.Fill(ds, "Baseinfo");

return ds;
}
AstaChen 2008-10-08
  • 打赏
  • 举报
回复
tvBaseinfoAddNode(Convert.ToInt32(myNode.Value), myNode);
这个单独调用的话不会有问题。。。

google上说:
"
如果你的参数添加是在循环体内完成的,
第2次时就会重复添加,此时触发参数过多异常

解决方法1,参数在循环体外添加,for内部只赋值和取返回值
解决方法2,每次循环清空参数Parameters.Clear();
"

小女子愚昧,两个解决方法都没看懂...
阿云ivan 2008-10-08
  • 打赏
  • 举报
回复
系统设计是否有问题?
treeview应该用xml保存到数据库的一个字段中才好
bonnibell 2008-10-08
  • 打赏
  • 举报
回复
递归? 结束内部连接?
yaodhnet 2008-10-08
  • 打赏
  • 举报
回复
没看出问题来。。
会不会是什么灵异事件啊???

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧